使用matplotlib在一个散点图中可视化两个pandas数据帧

时间:2017-08-30 13:51:25

标签: python pandas matplotlib

我有两个具有相同列名的pandas数据帧。

数据框1:

Dataframe 1

Dataframe 2:

Dataframe 2

  1. 两个数据框都具有相同的列名。我需要想象 两个dfs在相同的散点图中,其中X轴是值 出现在'功能'列,即D1_1_2,D1_2_3等
  2. 所有条目(或标签)ex都需要单个散点图: ' D1_1_2',' D1_2_3'等等,在'功能'列为X轴。 Y轴可以动态选取数值。
  3. 两个数据框值的颜色不同。
  4. 在重叠值之间添加间距或抖动。
  5. 需要支持。

    Expected output:

1 个答案:

答案 0 :(得分:0)

通过以下示例,您可能会了解如何执行您要查找的内容:

df2

关键是要求df1的情节使用import pandas as pd import numpy as np import matplotlib.pyplot as plt index = ["D1_1-2", "D1_2-3", "D1_3-4", "D1_4-5", "D1_5-6", "D1_6-7", "D1_7-8", "D1_8-9", "D1_1-3", "D1_2-3", "D1_3-5", "D1_5-7"] df1 = pd.DataFrame({"count": [10, 20, 25, 30, 32, 35, 25, 15, 5, 17, 11, 2]}, index=index) df2 = pd.DataFrame({"count": [15, 11, 30, 30, 20, 30, 25, 27, 5, 16, 11, 5]}, index=index) #We ensure we use different column names for df1 and df2 df1.columns = ["count1"] df2.columns = ["count2"] #We concatenate the dataframes df = pd.concat([df1, df2],axis=1) #Function to add jitter to the array def rand_jitter(arr): stdev = .01*(max(arr)-min(arr)) return arr + np.random.randn(len(arr)) * stdev # We iterate between the two columns of the concatenated dataframe for i,d in enumerate(df): y = df[d] arr = range(1,len(y)+1) x = rand_jitter(arr) plt.plot(x, y, mfc = ["red","blue"][i], mec='k', ms=7, marker="o", linestyle="None") # We set the ticks as the index labels and rotate the labels to avoid overlapping plt.xticks(arr, index, rotation='vertical') plt.show() 的情节中的轴。

您获得的情节如下: enter image description here

有抖动的建议:

如果你想为你的数据添加抖动,一种方法可以如下,其中我们不是使用前面的绘图轴,而是连接数据帧并迭代它:

XXX.war

最后,结果如下图所示: enter image description here