Python Plotly:百分比轴格式化程序

Posted

技术标签:

【中文标题】Python Plotly:百分比轴格式化程序【英文标题】:Python Plotly: Percentage Axis Formatter 【发布时间】:2021-05-10 23:29:10 【问题描述】:

我想从 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)


由于 matplotlib 的使用相当乏味,我想对 Plotly 做同样的事情。 我只找到了将刻度标签格式化为百分比的选项 - 但没有计算对我来说刻度和百分比。 有没有办法使用自动百分比刻度,还是我必须每次都手动计算(呃)?

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()

感谢您的任何提示。

【问题讨论】:

【参考方案1】:

我不确定百分比是否有坐标轴选项,但通过将 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()

【讨论】:

以上是关于Python Plotly:百分比轴格式化程序的主要内容,如果未能解决你的问题,请参考以下文章

Python使用matplotlib函数subplot可视化多个不同颜色的折线图使用set_major_formatter函数自定义设置y轴数值标签格式为百分比

如何从 plotly 中删除图中的轴刻度线?

格式轴刻度标签

Plotly:最强Python可视化库,没有之一

如何更改 OxyPlot Y 轴字符串格式?

Plotly 中的完整字符串 x 轴标签