matplotlib 为什么不能在右y轴设置中间刻度?

rkue9o1l  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(99)

导入绘图时所需的所有模块:

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd

字符串
创建用于绘图的数据:

df=pd.DataFrame({'close':np.random.uniform(19, 36, 200)})


准备图形和轴对象并打印:

fig, ax = plt.subplots()
ax.plot(df.index,df['close'])


计算x轴、yleft-axis、yright_axis的所有最小值和最大值

xmin,xmax = df.index[0],df.index[-1]
p_min,p_max = min(df['close']),max(df['close'])
c_min,c_max = 100*p_min/p_max,100


使用secondary_yaxis方法创建右轴:

t_price_change = lambda t_p: 100* t_p/p_max
t_change_price = lambda t_c: t_c*p_max /100    
ax_right = ax.secondary_yaxis("right", functions=(t_price_change, t_change_price))


为x-axis、yleft-axis、yright_axis创建刻度

ticks_x = np.append(ax.get_xticks(), (xmin,xmax))
ticks_yleft =  np.append(ax.get_yticks(), (p_min,p_max))
ticks_yright = np.append(ax_right.get_yticks(), (c_min,c_max))


设置x-axis、yleft-axis、yright_axis的刻度

ax.set_xticks(ticks_x)
ax.set_yticks(ticks_yleft)
ax_right.set_yticks(ticks_yright)


设置范围

ax.set_xlim(xmin, xmax)
ax.set_ylim(p_min, p_max)
ax_right.set_ylim(c_min, c_max)


显示图表:

plt.show()


x1c 0d1x的数据
你看右边的y轴没有中间的刻度,怎么能用代码加一些呢?

tkclm6bt

tkclm6bt1#

您面临的问题是,因为在第二个y轴上没有真正绘制任何东西,刻度是0,0.2,.1。添加~54和100,然后设置y_lim,将删除其他刻度。要向辅助y轴添加其他刻度并保留现有刻度(c_min和c_max),您需要将创建ticks_yright的行更改为bewlo...

ticks_yright = np.round(np.linspace(c_min, c_max, 5), 1)

字符串
注意上面的5会给予你5个刻度。更改它可增加或减少刻度数。这应该给予你一个这样的情节。。
x1c 0d1x的数据

aor9mmx1

aor9mmx12#

写一个函数来创建右y轴的刻度:

def get_ticks_yright(c_min,c_max):
    result = [c_min,c_max]
    n = int((c_max - c_min)// 10)
    if n > 1:
        for item in range(1,n+1):
            result.append(10*(c_min//10) + item*10)
    return result

字符串
与上面的代码几乎相同:

df=pd.DataFrame({'close':np.random.uniform(19, 36, 200)})
fig, ax = plt.subplots()
ax.plot(df.index,df['close'])
xmin,xmax = df.index[0],df.index[-1]
p_min,p_max = min(df['close']),max(df['close'])
c_min,c_max = 100*p_min/p_max,100
t_price_change = lambda t_p: 100* t_p/p_max
t_change_price = lambda t_c: t_c*p_max /100
ax_right = ax.secondary_yaxis("right", functions=(t_price_change, t_change_price))
ticks_x = np.append(ax.get_xticks(), (xmin,xmax))
ticks_yleft =  np.append(ax.get_yticks(), (p_min,p_max))
ticks_yright = get_ticks_yright(c_min,c_max)
ax.set_xticks(ticks_x)
ax.set_yticks(ticks_yleft)
ax_right.set_yticks(ticks_yright)
ax.set_xlim(xmin, xmax)
ax.set_ylim(p_min, p_max)
ax_right.set_ylim(c_min,c_max)
plt.show()


最高价格是100,在刻度中添加90,80,70等更有意义。

的数据

相关问题