plot绘制柱状图的时候出现的运行不了的问题

求帮忙解决一下我这个plotly画图功能用不了的问题,有偿谢谢!
这个代码本身好像没有什么问题但是就是不能运行,但是就是运行到最后一步的时候不能通过,也就是说其实只要将最后一行注释掉的话debug是没有什么问题的,请问各位这是什么情况?(下面还有系统给的问题提示但是我看不懂)

img

img


代码如下:

from random import randint


class Die:
    def __init__(self, num_sides=6):
        self.num_sides = num_sides
    def roll(self):
        return randint(1, self.num_sides)


die = Die()
results = []
frequencies = []
for roll_num in range(10000):
    result = die.roll()
    results.append(result)
for value in range(1, die.num_sides + 1):
    frequency = results.count(value)
    frequencies.append(frequency)
print(frequencies)

from plotly.graph_objs import Bar, Layout
from plotly import offline

x_v = [i for i in range(1, die.num_sides + 1)]
data = [Bar(x=x_v, y=frequencies)]

x_axis_config = {'title': ' '}
y_axis_config = {'title': ' '}
my_layout = Layout(title=' ', xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6.html')


解决办法:
1 点链接, 找到报错位置

img

2 修改编码, 默认值None改为 utf-8

img

3 再次运行

img

看错误提示是说字符编码的问题,请用utf8编码试试

望采纳!!!望采纳!!!望采纳!!!望采纳!!!
曲线救国了一下:
先把div拿到,然后输出为文件。

# -*- coding: utf-8 -*-
from random import randint


class Die:
    def __init__(self, num_sides=6):
        self.num_sides = num_sides

    def roll(self):
        return randint(1, self.num_sides)


die = Die()
results = []
frequencies = []
for roll_num in range(10000):
    result = die.roll()
    results.append(result)
for value in range(1, die.num_sides + 1):
    frequency = results.count(value)
    frequencies.append(frequency)
print(frequencies)

from plotly.graph_objs import Bar, Layout
from plotly import offline

x_v = [i for i in range(1, die.num_sides + 1)]
data = [Bar(x=x_v, y=frequencies)]

x_axis_config = {'title': 'A'}
y_axis_config = {'title': 'B'}

my_layout = Layout(title='C', xaxis=x_axis_config, yaxis=y_axis_config)
div = offline.plot({'data': data, 'layout': my_layout}, output_type='div')

with open(file="b6.html", mode="wb") as f1:
    data = div.encode('utf-8')
    f1.write(data)
    f1.close()

当然也可以修改html.py这个文件的write_text方法:应该是官方bug
path.write_text(html_str) ===》 path.write_text(html_str, 'utf-8')

img

经测试可以的

应该是因为你的项目路径存在中文
最低端的方法就是换个纯英文的路径运行这个项目

运行了一下你的代码,没有什么问题。看报错,是你的路径中存在中文所以报错了,建议把代码拷贝到不含中文路径的文件夹中,再运行应该就没什么问题了。

py文件的开头先加入一行代码

# -*- coding:utf-8 -*-

望采纳!!!望采纳!!!望采纳!!!望采纳!!!

似乎以某种方式从 html 内容中的原始字节中获取了 unicode 字符。

如果 html 内容中的原始字节不是用 gbk 编码的,那么很可能有一些 unicode 字符无法用 gbk 表示。在这种情况下,您可能希望使用原始编码对结果进行编码,或者将它们编码为 gb18030,它可以采用任何 unicode 字符。

另一种可能性是你以某种方式破坏了原始字节或 unicode。我当然希望您的正则表达式设计是在 unicode 上完成的,而不是在一些可变长度字符编码(如 gb2312、gbk 等)上完成的。

而且我看你报错的时候提示:path.write_text(html_str) , 这里建议试用gbk编码一下

html_str.encode('gbk')

在这段代码中,没有明显的语法错误和逻辑错误。它模拟了10000次骰子掷骰子,统计了每个点数出现的频率,并使用plotly库绘制了频率分布图。
但是,在这段代码中,有几点需要注意:

1.在第13行中,die = Die()语句实例化了一个Die类的对象,该对象的默认面数为6,如果需要模拟其他面数的骰子,需要显式地传递num_sides参数。
2.在第28行,offline.plot()函数绘制出来的图像将被保存在文件d6.html中,如果您需要重复使用该图,请确保该文件是可用的。
3.第25行和26行的x_axis_config和y_axis_config变量配置中的'title'属性应该赋值为有意义的字符串,而不是空字符串。
4.第28行的my_layout变量配置中的'title'属性应该赋值为有意义的字符串,而不是空字符串。
如果我的回答对您有帮助,请及时采纳,谢谢。

编程养成好的习惯,切勿使用中文目录;页面编码每个页面要统一,常用的就是utf8或者gbk,特别写入和输出,编码不统一会报错!

你的代码贴的不全,报错的 程序行都没有贴。
报错信息显示 问题出在中文代码的格式上,估计没有选择 UTF-8。
你可以试试将报错的 1241行修改为:

return f.write(data, encoding='utf-8')

编码问题,以utf-8编码试试,可以在文件开头加

# -*- coding:utf-8 -*-