0

我有负载配置文件数据,其中 x 轴是负载配置文件,因此对于多个相同的 x 值(恒定负载)我有不同的 y 值。到现在为止,我在 excel 中用线绘制 y 并右键单击图形->选择数据->通过提供范围 ox 轴数据来更改水平轴数据,并用于给我图表

示例图表

我遇到的问题是当我尝试给出 plot(x,y) 时,matplotlib 为 x 的唯一 val 绘制 y,即它忽略了相同 x 值的所有剩余值。当我用 plot(y) 绘图时,我在 x 轴上得到序列号,我尝试使用 xticks([0,5,10,15]) 进行检查,但无法获得所需的结果。我的问题是是否有可能以与 excel 类似的方式绘制图表我能想到的另一种选择是用相同的水平轴绘制 plot(y 和 plot (x) 它至少给出了一个图形的想法但是有什么办法可以用excel的方式做吗??

4

4 回答 4

0

如果要y-values为给定的 绘图x-values,则需要获取具有相同 x 值的索引。如果您正在使用,numpy那么您可以尝试

import pylab as plt
import numpy as np
x=np.array([1]*5+[2]*5+[3]*5)
y=np.array([1,2,3,4,5]*3)
idx=(x==1) # Get the index where x-values are 1
plt.plot(y[idx],'o-')
plt.show()

如果您正在使用列表,则可以通过以下方式获取索引

# Get the index where x-values are 1
idx=[i for i, j in enumerate(x) if j == 1] 
于 2012-07-24T10:20:23.150 回答
0

根据您的描述,在我看来,您想使用“scatter”绘图命令而不是“plot”绘图命令。这将允许使用冗余 x 值。示例代码:

import numpy as np
import matplotlib.pyplot as plt

# Generate some data that has non-unique x-values
x1 = np.linspace(1,50)
y1 = x1**2
y2 = 2*x1
x3 = np.append(x1,x1)
y3 = np.append(y1,y2)

# Now plot it using the scatter command
# Note that some of the abbreviations that work with plot,
# such as 'ro' for red circles don't work with scatter
plt.scatter(x3,y3,color='red',marker='o')

散点图

正如我在评论中提到的,一些方便的“绘图”快捷方式不适用于“分散”,因此您可能需要查看文档: http: //matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib。 pyplot.scatter

于 2012-07-24T13:32:23.580 回答
0

只是回答自己的问题,当我几年前发布这个问题时发现了这个:)

def plotter(y1,y2,y1name,y2name):
    averageY1=float(sum(y1)/len(y1))
    averageY2=float(sum(y2)/len(y2))
    fig = plt.figure()
    ax1 = fig.add_subplot(111)  
    ax1.plot(y1,'b-',linewidth=2.0)
    ax1.set_xlabel("SNo")
    # Make the y2-axis label and tick labels match the line color.
    ax1.set_ylabel(y1name, color='b')
    for tl in ax1.get_yticklabels():
        tl.set_color('b')
    ax1.axis([0,len(y2),0,max(y1)+50])
    
    ax2 = ax1.twinx()
    
    ax2.plot(y2, 'r-')
    ax2.axis([0,len(y2),0,max(y2)+50])
    ax2.set_ylabel(y2name, color='r')
    for tl in ax2.get_yticklabels():
        tl.set_color('r')
    plt.title(y1name + " vs " + y2name)
    #plt.fill_between(y2,1,y1)
    plt.grid(True,linestyle='-',color='0.75')

    plt.savefig(y1name+"VS"+y2name+".png",dpi=200)

于 2015-03-03T17:15:48.517 回答
0

您可以使用

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 1, 1, 2, 2, 2])
y = np.array([1, 2, 1, 5, 6, 7])

fig, ax = plt.subplots()
ax.plot(np.arange(len(x)), y)
ax.set_xticklabels(x)
plt.show()
于 2021-05-28T15:49:36.253 回答