在 yaxis 上添加扭结或更改 yaxis 刻度线
Adding a kink on yaxis or changing yaxis ticks plotly
我使用以下代码生成下图:
import plotly.express as px
count = {
'1': 1040513,
'2': 1043584,
'3': 46559347,
'4': 91046152,
'5': 207986283,
'6': 242763604,
'7': 253851018,
'8': 377742455,
'9': 532537482
}
fig = px.line(x=count.keys(), y=count.values(),
labels={'x': 'num', 'y': 'count (in mil)'},
title='count over nums')
fig.show()
我想更改 y 轴,使 1(在 x 轴上)的 y 轴值看起来不像 0。使用 fig.update_layout()
指定刻度大小不会由于数字和日志 y 轴不是我想要的,因此生成可辨别的图表。
已尝试使用 seaborn/matplotlib 也导致了类似的问题。任何输入!
由于 0 对大多数数据都有特殊含义,因此主要关注点似乎是您不希望接近 0 的值被误解为 0。
您可以使用自定义刻度数组并手动传递 [0, 10**6, 10**8, 2*10**8, ..., 5*10**8]
,但这是一个脆弱的解决方案,因为您必须提前知道 plotly 在创建图表时将生成的默认刻度值。
要使解决方案更具动态性,您可以使用完整的数字进行开发,正如 所建议的那样。您将需要 运行 在终端中执行以下操作:
pip install -U kaleido
然后我们将使用 full_fig = fig.full_figure_for_development()
,它可以让您访问刻度线的范围、它们之间的间距以及第一个刻度线的位置,这些信息足以重现刻度线。之后,您可以在此数组中为您喜欢的任何值插入一个新的刻度线,例如 10**6
.
如果您想包含 0 的文本标记和刻度文本,它将与 1M
的刻度文本重叠,除非您放大得足够远。我选择删除 0 的刻度线,因为很难弄清楚将 0
的刻度文本放在哪里,这样它就不会与 1M
的刻度文本重叠(但显示了两种可能性在附图中)
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
count = {
'1': 1040513,
'2': 1043584,
'3': 46559347,
'4': 91046152,
'5': 207986283,
'6': 242763604,
'7': 253851018,
'8': 377742455,
'9': 532537482
}
fig = px.line(x=count.keys(), y=count.values(),
labels={'x': 'num', 'y': 'count (in mil)'},
title='count over nums')
## reproduce the ytick array using the full figure for development
## reference:
full_fig = fig.full_figure_for_development()
y_min, y_max = full_fig.layout['yaxis']['range']
y_first_tick = full_fig.layout['yaxis']['tick0']
y_dtick = full_fig.layout['yaxis']['dtick']
y_tick_array = np.arange(y_first_tick,y_max,y_dtick)
## include the tickmark for 0
# y_tick_vals = y_tick_array.tolist() + [10**6]
## remove the tickmark for 0
y_tick_vals = y_tick_array[1:].tolist() + [10**6]
y_tick_vals.sort()
fig.update_layout(
yaxis = dict(
tickmode = 'array',
tickvals = y_tick_vals,
)
)
fig.show()
如果您删除 0 的刻度线,它将如下所示:
如果包含 0 的刻度线,它将如下所示:
我使用以下代码生成下图:
import plotly.express as px
count = {
'1': 1040513,
'2': 1043584,
'3': 46559347,
'4': 91046152,
'5': 207986283,
'6': 242763604,
'7': 253851018,
'8': 377742455,
'9': 532537482
}
fig = px.line(x=count.keys(), y=count.values(),
labels={'x': 'num', 'y': 'count (in mil)'},
title='count over nums')
fig.show()
我想更改 y 轴,使 1(在 x 轴上)的 y 轴值看起来不像 0。使用 fig.update_layout()
指定刻度大小不会由于数字和日志 y 轴不是我想要的,因此生成可辨别的图表。
已尝试使用 seaborn/matplotlib 也导致了类似的问题。任何输入!
由于 0 对大多数数据都有特殊含义,因此主要关注点似乎是您不希望接近 0 的值被误解为 0。
您可以使用自定义刻度数组并手动传递 [0, 10**6, 10**8, 2*10**8, ..., 5*10**8]
,但这是一个脆弱的解决方案,因为您必须提前知道 plotly 在创建图表时将生成的默认刻度值。
要使解决方案更具动态性,您可以使用完整的数字进行开发,正如
pip install -U kaleido
然后我们将使用 full_fig = fig.full_figure_for_development()
,它可以让您访问刻度线的范围、它们之间的间距以及第一个刻度线的位置,这些信息足以重现刻度线。之后,您可以在此数组中为您喜欢的任何值插入一个新的刻度线,例如 10**6
.
如果您想包含 0 的文本标记和刻度文本,它将与 1M
的刻度文本重叠,除非您放大得足够远。我选择删除 0 的刻度线,因为很难弄清楚将 0
的刻度文本放在哪里,这样它就不会与 1M
的刻度文本重叠(但显示了两种可能性在附图中)
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
count = {
'1': 1040513,
'2': 1043584,
'3': 46559347,
'4': 91046152,
'5': 207986283,
'6': 242763604,
'7': 253851018,
'8': 377742455,
'9': 532537482
}
fig = px.line(x=count.keys(), y=count.values(),
labels={'x': 'num', 'y': 'count (in mil)'},
title='count over nums')
## reproduce the ytick array using the full figure for development
## reference:
full_fig = fig.full_figure_for_development()
y_min, y_max = full_fig.layout['yaxis']['range']
y_first_tick = full_fig.layout['yaxis']['tick0']
y_dtick = full_fig.layout['yaxis']['dtick']
y_tick_array = np.arange(y_first_tick,y_max,y_dtick)
## include the tickmark for 0
# y_tick_vals = y_tick_array.tolist() + [10**6]
## remove the tickmark for 0
y_tick_vals = y_tick_array[1:].tolist() + [10**6]
y_tick_vals.sort()
fig.update_layout(
yaxis = dict(
tickmode = 'array',
tickvals = y_tick_vals,
)
)
fig.show()
如果您删除 0 的刻度线,它将如下所示:
如果包含 0 的刻度线,它将如下所示: