plotly 导出的html显示中文乱码,怎么解决?
import pandas as pd
import plotly as py
import plotly.graph_objs as go
profit_rate = [-0.001, -0.013, -0.004, 0.002, 0.003, -0.001, -0.009, 0.0, 0.007,\
-0.005, 0.0, 0.001, -0.006, -0.006, -0.009, -0.013, 0.005, 0.007,\
0.004, -0.006, -0.009, -0.004, 0.015, 0.007, 0.001, 0.003, -0.009,\
-0.005, 0.001, -0.008, -0.016, 0.002, -0.013, -0.009, -0.014, 0.009,\
-0.003, 0.002, -0.001, 0.011, 0.004]
date = pd.bdate_range(start = '3/1/2017', end = '4/30/2017')
trace = [go.Scatter(
x = date,
y = profit_rate
)]
layout = dict(
title = '浦发银行20170301-20170428涨跌幅变化',
xaxis = dict(title = 'Date'),
yaxis = dict(title = 'profit_rate'),
font_family="SimHei"
)
fig = dict(data = trace, layout = layout)
html = py.offline.plot(fig, filename='浦发银行20170301-20170428涨跌幅变化.html',auto_open=False)
主要是由于win11系统使用的默认字符集是GBK,需要修改默认字符集,修改方法如下:
按键盘win键(或点击底部栏的"开始"按钮),搜索“地区”
打开语言和区域
点击管理语言设置
显示
在“Beta版:使用Unicode UTF-8提供全球语言支持”前面打钩,点击确定后重启
重启后,plotly生成的html能够正常显示中文
Python 的 Plotly 库生成的 HTML 中出现中文乱码的问题,通常情况下可以通过设置字体来解决。以下是一些可能的解决方法:
设置字体:在 Plotly 中设置中文字体,如 "SimHei"、"Microsoft YaHei" 等,例如:
import plotly.graph_objects as go
# 创建折线图
fig = go.Figure()
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6], name="折线"))
# 设置中文字体
fig.update_layout(
font_family="SimHei",
)
# 导出 HTML 文件
fig.write_html("figure.html")
在上面的代码中,通过调用 update_layout()
方法来设置字体为华文黑体,值为"SimHei"。这样可以确保生成的 HTML 中文标题显示正常。
安装中文字体库:为操作系统安装中文字体库,以确保支持中文显示,例如安装 "SimHei"、"Microsoft YaHei" 等字体库。
将图表导出为图片格式,再将图片插入 HTML 中:将图表导出为 PNG、JPEG、SVG 等格式,然后将图片插入到 HTML 文件中。这样可以确保图表标题、轴标签等文字显示正常。例如,
fig.write_image("figure.png")
然后将图片嵌入 HTML 中:
<div>
<img src="./figure.png" alt="" width="1000px">
</div>
需要注意的是,这种方法可能会降低图表的精度和交互性。
如果以上方法都尝试过了仍然不能解决问题,那么建议使用其他支持中文显示的数据可视化库,例如 Pyecharts 或 Matplotlib。
不知道你这个问题是否已经解决, 如果还没有解决的话:散点图适合表现大量样本的多个属性的分布规律。散点图的每个点表示一个样本,每个坐标维度表示一个属性。
当样本属性维度多于2个时,可以使用点的颜色或大小等方式来表达更多属性维度。
import pandas as pd
import plotly.graph_objs as go
dfboy = pd.DataFrame()
dfboy['weight'] = [56,67,65,70,57,60,80,85,76,64]
dfboy['height'] = [162,170,168,172,168,172,180,176,178,170]
dfboy["BMI"] = dfboy["weight"]/(dfboy["height"]**2)
dfgirl = pd.DataFrame()
dfgirl['weight'] = [50,62,60,70,57,45,62,65,70,56]
dfgirl['height'] = [155,162,165,170,166,158,160,170,172,165]
dfgirl["gender"] = "female"
dfgirl["BMI"] = dfgirl["weight"]/(dfgirl["height"]**2)
trace1 = go.Scatter(x=dfboy["weight"],y=dfboy["height"],mode="markers",name="male",
marker = dict(color="blue",size=3e5*dfboy["BMI"],sizemode='area'))
trace2 = go.Scatter(x=dfgirl["weight"],y=dfgirl["height"],mode="markers",name="female",
marker = dict(color="red",size=3e5*dfgirl["BMI"],
sizemode='area'))
layout = go.Layout({"title":"height & weight",
"xaxis.title":"weight",
"yaxis.title":"height",
"legend.title":"gender",
"font.size":15})
fig = go.Figure(data=[trace1,trace2],layout=layout)
fig.show()
热力图可以直观地展示一个二维矩阵的取值,它将一个矩阵的每个元素取值对应到热力图上的一个像素颜色取值。
import numpy as np
import plotly.graph_objs as go
arr = np.random.normal(loc = 0,scale = 1,size = [10,10])
trace = go.Heatmap(x=np.arange(10),y=np.arange(10),z=arr,
colorscale='Viridis',showscale=True,reversescale = False)
layout = go.Layout(width=600, height=600)
fig = go.Figure(data=trace,layout=layout)
fig.show()
答案:
可以尝试以下方法解决plotly导出的html中文乱码问题:
1.在代码中添加以下代码来设置字体:
import plotly.io as pio pio.templates.default = "ggplot2" pio.renderers.default = "browser"
pio.templates[pio.templates.default].layout.font.family = 'Microsoft YaHei'
2.将文本框中文进行转码:
import plotly.graph_objects as go import pandas as pd
data = pd.read_csv("tips.csv")
data['day'] = data['day'].apply(lambda x: x.encode('unicode_escape').decode('utf-8')) data['sex'] = data['sex'].apply(lambda x: x.encode('unicode_escape').decode('utf-8'))
fig = go.Figure()
fig.add_trace(go.Scatter( x=data['sex'], y=data['tip'], mode='markers', ))
fig.update_layout( title="每周小费", xaxis_title="日期", yaxis_title="小费", )
fig.show()
3.使用HTML的meta标签设置中文字体:
在生成的HTML文件中添加以下代码:
以上是部分解决方案,具体还要根据实际情况进行调试。