Python Plotly : Percentage Axis Formatter

标签 python pandas matplotlib format plotly

我想从 Pandas 数据框中创建一个图表,其中轴刻度应该是百分比。
使用 matplotlib 有一个很好的轴格式化程序,它可以根据给定的最大值自动计算百分比刻度:
示例:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame( { 'images': np.arange(0, 355, 5) } )      # 70 items in total, max is 350

ax = df.plot()
ax.yaxis.set_major_formatter(pltticker.PercentFormatter(xmax=350))
loc = pltticker.MultipleLocator(base=50)     # locator puts ticks at regular intervals
ax.yaxis.set_major_locator(loc)
enter image description here

由于matplotlib的使用相当繁琐,我想用Plotly做同样的事情。 我只找到了将刻度标签格式化为百分比的选项 - 但没有为我计算刻度和百分比的“自动格式化程序”。 有没有办法使用自动百分比刻度或我每次都必须手动计算它们(urgh)?
import plotly.express as px
import pandas as pd

fig = px.line(df, x=df.index, y=df.images, labels={'index':'num of users', '0':'num of img'})
fig.layout.yaxis.tickformat = ',.0%'         # does not help
fig.show()
enter image description here
谢谢你的任何提示。

最佳答案

我不确定百分比是否有轴选项,但通过将 y 除以最大值,y = df.y/df.y.max() 相对容易到达那里.这些类型的计算直接在 plot 调用中执行,非常方便,我一直在使用它们。
注意:如果您有可能出现负值,它确实会变得更加复杂(和丑陋)。类似 y=(df.y-df.y.min())/(df.y.max()-df.y.min())可能是必要的和更通用的解决方案。
完整示例:

import plotly.express as px
import pandas as pd

data = {'x': [0, 1, 2, 3, 4], 'y': [0, 1, 4, 9, 16]}
df = pd.DataFrame.from_dict(data)

fig = px.line(df, x=df.x, y=df.y/df.y.max())
#or# fig = px.line(df, x=df.x, y=(df.y-df.y.min())/(df.y.max()-df.y.min()))
fig.layout.yaxis.tickformat = ',.0%'
fig.show()
enter image description here

关于Python Plotly : Percentage Axis Formatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66083322/

相关文章:

python - 下载远程图像并将其保存到 Django 模型

python - 在 Django 1.7 中动态过滤 ListView CBV

python - pandas Dataframe 中 mode() 的输出不舒服

python - 使用 Spyder IDE 结束在 matplotlib 中手动选择轮廓

python - Matplotlib 选择事件功能

python - Django Admin - 更改标题 'Django administration' 文本

python - 将 python 代码放到网上 - 与我的 app.py 脚本混淆

python - Pandas 键错误

python - 删除列之间的多余空格

python - Matplotlib 中许多子图的通用标题