【问题标题】:How to plot in python where x-axis values appears more than once, like 0 1 2 3 2 1 0如何在 python 中绘制 x 轴值多次出现的地方,如 0 1 2 3 2 1 0
【发布时间】:2015-11-22 16:39:24
【问题描述】:

我是 python 新手,正在玩弄它的绘图功能。我想绘制Y1Y2,其中X的值从10到100,步长为10,100到10,步长为-10。

我能够使用 Excel 绘制此图。 这是XY 的值

X  = [10 20 30 40 50 60 70 80 90 100 100 90 80 70 60 50 40 30 20 10]
Y1 = [0 100 200 300 400 500 600 700 800 900 900 800 700 600 500 400 300 200 100 0]
Y2 = [100 200 300 400 500 600 700 800 900 1000 1000 900 800 700 600 500 400 300 200 100]

我们如何使用matplotlibnumpy 在python 中绘制类似的东西?

【问题讨论】:

  • 除非您要求其他人为您绘制数据,否则我认为没有必要将它们转储到此处。
  • 很高兴看到您到目前为止尝试了什么。
  • nebuch- 我只是想尽可能清楚。这实际上很难用语言来解释,因此我在 excel 中创建了一个示例数据集
  • 请分享一些您尝试过的代码,以便人们更好地理解。
  • 我看不出这里有什么困难,只需对这两个数据系列使用散点图,如本答案 stackoverflow.com/a/4270437/1093485 所示

标签: python numpy matplotlib plot


【解决方案1】:

不清楚你到底在问什么。您是否希望重复的 X 值相互叠加?在这种情况下,您可以使用ax.plot,如下面的第一个示例 (ax1) 所示。

如果您希望 X 轴按照它们在列表中出现的顺序显示所有 X 值,您可以使用 scatter,然后只需将 xticklabels 设置为 X 中的值,如下面的第二个示例 (ax2)

正如上面在 cmets 中所说,这些都不是特别困难:matplotlib gallery 中有很多例子。

import matplotlib.pyplot as plt

X  = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10]
Y1 = [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 900, 800, 700, 600, 500, 400, 300, 200, 100, 0]
Y2 = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100]

fig = plt.figure()
ax1=plt.subplot(211)
ax2=plt.subplot(212)

# First example: overlap repeated X values
ax1.plot(X,Y1,'ro')
ax1.plot(X,Y2,'bo')
ax1.set_title('ax.plot')

# Second example: keep all X values in sequential order
ax2.scatter(range(len(Y1)),Y1,color='r')
ax2.scatter(range(len(Y2)),Y2,c='b')
ax2.set_title('ax.scatter')
ax2.set_xlim(0,len(Y1)-1)
ax2.set_xticks(range(len(Y1)))
ax2.set_xticklabels(X)

plt.show()

【讨论】:

    【解决方案2】:

    实际上,您不必使用 numpy 来使用 matplotlib 进行绘图。您可以使用普通的 python 列表来使用 matplotlib 进行绘图。 NumPy 是使用 Python 进行科学计算的软件包。它用于处理矩阵的强大功能。使用标准列表进行矩阵运算比较慢。这就是为什么 numpy 很棒。

    你可以阅读关于 numpy 的 here!

    您可以从link 获得帮助,以使用 pyplot 绘制数据。调整参数以查看您的发现。

    我还提供了这个简单的绘图代码。我假设你知道如何在 python 中使用import

    import matplotlib.pyplot as plt
    
    X = [range(0,100,10)]
    Y = [range(0,1000,100)]
    
    plt.scatter(X,Y)
    plt.show()
    

    如果你坚持使用numpy你可以更改这两部分的代码

    import numpy as np
    
    X = np.array([range(0,100,10)])
    Y = np.array([range(0,1000,100)])
    

    【讨论】:

    • OP 要求用一个图来列出他的两个数据集。因此,您的解决方案不起作用,他将需要使用 axes 对象。
    猜你喜欢
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2018-09-26
    • 2015-04-02
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多