具有相同数据的Matplotlib图不会重叠

时间:2017-01-16 11:16:46

标签: python matplotlib

我已经生成了一些数据并尝试将它们可视化为同一图中的两个图形。一个作为条形,另一个作为一条线。

但由于某些原因,图表似乎不重叠。

这是我的代码:

# roll two 6-sided dices 500 times
dice_1 = pd.Series(np.random.randint(1, 7, 500))
dice_2 = pd.Series(np.random.randint(1, 7, 500))

dices = dice_1 + dice_2

# plotting the requency of a 2 times 6 sided dice role
fc = collections.Counter(dices)
freq = pd.Series(fc)
freq.plot(kind='line', alpha=0.6, linestyle='-', marker='o')
freq.plot(kind='bar', color='k', alpha=0.6)

这是图表。

enter image description here

数据集是相同的,但是线图将两个数据点向右移动(从4开始而不是2)。如果我单独绘制它们,它们会正确显示(从2开始)。那么如果我在同一个图表中绘制它们会有什么不同呢?以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我还没有找到一种比重新提供x轴数据更简单的方法。如果这代表了您正在使用的更大的方法,那么您可能需要从pd.Series()而不是使用列表来绘制此数据,但此代码至少会为您提供所需的绘图。如果您正在使用Python 3,请将iteritems()更改为items()

似乎x轴的某些自动缩放发生在线图之后,这使得两个图不同步两个点(可能的最低值)。有可能在x轴上禁用此自动缩放,直到两个绘图都出现,但这似乎更难。

import collections
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# roll two 6-sided dices 500 times
dice_1 = pd.Series(np.random.randint(1, 7, 500))
dice_2 = pd.Series(np.random.randint(1, 7, 500))

dices = dice_1 + dice_2

# plotting the requency of a 2 times 6 sided dice role
fc = collections.Counter(dices)

x_axis = [key for key, value in fc.iteritems()]
y_axis = [value for key, value in fc.iteritems()]

plt.plot(x_axis, y_axis, alpha=0.6, linestyle='-', marker='o')
plt.bar(x_axis, y_axis, color='k', alpha=0.6, align='center')
plt.show()

答案 1 :(得分:1)

这是因为系列图使用索引,将use_index设置为False将解决问题,我还建议使用groupbylen计算每个频率组合

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# roll two 6-sided dices 500 times
dice_1 = pd.Series(np.random.randint(1, 7, 500))
dice_2 = pd.Series(np.random.randint(1, 7, 500))
dices = dice_1 + dice_2

# returns the corresponding value of each index from dices
func = lambda x: dices.loc[x]

fc = dices.groupby(func).agg({'count': len})

ax = fc.plot(kind='line', alpha=0.6, linestyle='-',
             marker='o', use_index=False)
fc.plot(ax=ax, kind='bar', alpha=0.6, color='k')

plt.show()

结果如下所示 plot