【问题标题】:Set order of y axis in python with Matplotlib使用 Matplotlib 在 python 中设置 y 轴的顺序
【发布时间】:2020-11-02 14:13:08
【问题描述】:

我正在尝试绘制具有值 a、b、c 和 d 的简单数组。我想按字母顺序绘制这些数组。例如,我在下面给出的数据框中添加了第五行的图,y 值从“a”(好)开始,然后下一个 y 值是“c”(错误),我想要“b”在那个地方。简而言之; y 值应按字母顺序排列,而不会丢失 x 值顺序。

给出了数据集的头部。这是非常基本的。

还有(非常基本的)代码 bins = ['a', 'b', 'c', 'd']; plt.plot((X_sax.iloc[4,:])); plt.yticks(bins);

有人可以帮帮我吗?

谢谢!

【问题讨论】:

标签: python matplotlib plot


【解决方案1】:

我会将 y 轴映射到值,然后将轴命名为 @Yogesh 建议的名称。

from matplotlib import pyplot as plt  
X_sax = list('accbcbbbbcb')

datamap = {'a':1,'b':2,'c':3, 'd':4}
X_sax = list(map(lambda x: datamap[x], X_sax))
           
plt.plot((X_sax))
plt.yticks([1,3,2,4], bins)

给予:

【讨论】:

    【解决方案2】:

    下一个代码使用NumPy-only 函数来非常快速地处理数据:

    import matplotlib.pyplot as plt, pandas as pd, numpy as np
    # ----- Input -----
    bins = ['a', 'b', 'c', 'd']
    X_sax = pd.DataFrame(data = np.array([list('accbcbbbbcb')]))
    print(X_sax)
    # ----- Show ------
    v = X_sax.values[0, :] # Choose which row to show
    b = np.sort(bins)
    v = np.searchsorted(b, v)
    plt.plot(v)
    plt.yticks(np.arange(b.size), b)
    plt.show()
    

    您也可以try code above online!

    输出:

       0  1  2  3  4  5  6  7  8  9 10
    0  a  c  c  b  c  b  b  b  b  c  b
    

    【讨论】:

      【解决方案3】:

      使用这个:

      plt.yticks(np.arange(len_of_y_ticks), y_order)
      

      例如:

      x = np.arange(0, 11)
      y = 'a c c b c b b b b c b'.split()
      y_order = sorted(set(y))
      len_of_y_ticks = len(set(y))
      y = list(map(lambda x: ord(x)-97, y))
      plt.plot(x, y)
      plt.yticks(np.arange(4), y_order)
      plt.show()
      

      【讨论】:

      • 感谢您的回复。现在我得到与上图相同的输出,只有 b 和 c 被交换。但我希望图表也按字母顺序处理数据。不仅改变蜱虫。值 'c' 应该被认为高于 'a' 和 'b'。
      • 哦,我明白了,在这种情况下,在 plt.plot(x, y) 之前添加 y = list(map(lambda x: ord(x)-97, y))。我已经编辑了主要代码,现在希望它能让你满意。
      猜你喜欢
      • 2011-04-16
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      相关资源
      最近更新 更多