在y轴上绘制特定值,而不是从数据帧增加比例

时间:2018-06-12 14:21:35

标签: python pandas dataframe plot

当将数据框中的2列绘制成线图时,是否有可能(而不是一致增加的比例)在y轴上具有固定值(并保持轴上数字之间的距离不变)?例如,取决于数据集中的值,而不是0,100,200,300 ......具有0,21,53,124,287?所以基本上在轴上有所有可能的值固定而不是增加的比例?

2 个答案:

答案 0 :(得分:3)

是的,您可以使用:ax.set_yticks()

示例:

df = pd.DataFrame([[13, 1], [14, 1.5], [15, 1.8], [16, 2], [17, 2], [18, 3 ], [19, 3.6]], columns = ['A','B'])
fig, ax = plt.subplots()

x = df['A']
y = df['B']
ax.plot(x, y, 'g-')
ax.set_yticks(y)
plt.show()

enter image description here 或者,如果值彼此非常远,则可以使用ax.set_yscale('log')。 例如:

df = pd.DataFrame([[13, 1], [14, 1.5], [15, 1.8], [16, 2], [17, 2], [18, 3 ], [19, 3.6], [20, 300]], columns = ['A','B'])
fig, ax = plt.subplots()

x = df['A']
y = df['B']

ax.plot(x, y, 'g-')
ax.set_yscale('log', basex=2)
ax.yaxis.set_ticks(y)
ax.yaxis.set_ticklabels(y)
plt.show()

enter image description here

答案 1 :(得分:1)

您需要做的是:

  1. 获取所有不同的y值并对其进行排序

  2. 根据他们在有序列表中的位置在地块上设置y位置

  3. 根据不同的有序值设置y标签

  4. 以下代码可以

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    df = pd.DataFrame([[13, 1], [14, 1.8], [16, 2], [15, 1.5], [17, 2], [18, 3 ], 
                       [19, 200],[20, 3.6], ], columns = ['A','B'])
    
    x = df['A']
    y = df['B']
    
    y_keys = np.sort(y.unique())
    y_values = range(len(y_keys))
    y_dict = dict(zip(y_keys,y_values))
    
    fig, ax = plt.subplots()
    
    ax.plot(x,[y_dict[k] for k in y],'o-')
    
    ax.set_yticks(y_values)
    ax.set_yticklabels(y_keys)
    

    fixed y distance but different values