如何在一个散点图上在自己的列上绘制多个数据集

时间:2019-03-29 17:55:19

标签: python matplotlib scatter-plot

我有5个数组,每个数组包含30个值。我想在一个散点图中将每个数组绘制在其自己的列上。 因此,我想得出一个散点图,其中有5列,每列有30个数据点。我不希望数组重叠,这就是我的代码现在遇到的问题。

import pandas as pd

with open(r'wft.csv') as csvfile:
    tdata = pd.read_csv(csvfile)

tdata['date'] = pd.to_datetime(tdata['date'], format='%m/%d/%Y %H:%M')
tdata = tdata.set_index(['date'])


wy2015 = tdata.loc['2014-10-1 00:00' : '2015-7-1 00:00']
wy2016 = tdata.loc['2015-10-1 00:00' : '2016-7-1 00:00']
wy2017 = tdata.loc['2016-10-1 00:00' : '2017-7-1 00:00']

writer = pd.ExcelWriter('WFT.xlsx', engine='xlsxwriter')
wyID = [wy2014, wy2015, wy2016, wy2017]
seq = ['wy2014', 'wy2015', 'wy2016', 'wy2017']

for df in wyID:
    df = df.sort_values(by=['turbidity'], ascending=False)
    df['rank'] = df['turbidity'].rank(method = 'first', ascending=0)
    df['cunnanes'] = (df['rank'] - 0.4)/(len(df['rank']) + 0.2)*100
    for name in seq:
        df.to_excel(writer, sheet_name= name)
writer.save()

这段代码为我提供了一个散点图,其中包含所有数据点,但它们全部重叠,没有明显的列。

y是30个数字的列表,因为plt.scatter函数需要两个参数。 Coh1mean40,Coh75mean40等都是每个都包含[0.435,0.56,0.645 ...] 30个值的数组

1 个答案:

答案 0 :(得分:1)

您需要为每个调用指定唯一的y,每个数组将位于不同的“列”中。最好改成x,因为用第一个参数定义每个点的x值。

x = np.ones(30)

plt.scatter(0 * x,Coh1mean40,label='1', c='r')
plt.scatter(1 * x, Coh75mean40,label='75', c='b')
plt.scatter(2 * x,Coh05mean40,label='50', c='y')
plt.scatter(3 * x,Coh25mean40,label='25', c='g')
plt.scatter(4 * x,Coh00mean40,label='0')
plt.legend()
plt.show()

但是,您可能需要研究Seaborn,特别是stripplot