Rol*_*olo 2 python matplotlib seaborn
我有两个具有不同长度和变量数量的系列,并且想要绘制每个系列中每个变量(名称)出现的频率。我想要系列 1 的灰色计数图和系列 2 的红色计数图,我希望它们彼此重叠显示。然而,由于系列 2 缺少“南希”,它也减少了系列 1 的“南希”计数。我如何获得包含 Nancy 酒吧的两个系列的完整叠加?
import matplotlib.pyplot as plt
import seaborn as sns
ser1 = pd.Series( ['tom','tom','bob','bob','nancy'])
ser2 = pd.Series( ['tom','bob'])
fig = plt.figure()
sns.countplot(x=ser1, color='grey')
sns.countplot(x=ser2, color='red')
plt.show()
Run Code Online (Sandbox Code Playgroud)
编辑:更改为以下将再次导致问题。我如何让 Matplotlib 识别出这两个系列具有相同的正在计算的分类值?
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
ser1 = pd.Series( ['tom','tom','bob','bob','nancy','zulu'])
ser2 = pd.Series( ['tom','nancy'])
ser1 = ser1.astype('category')
ser2 = ser2.astype('category')
fig = plt.figure()
ax = sns.countplot(x=ser2, color='red', zorder=2)
sns.countplot(x=ser1, color='grey')
plt.show()
Run Code Online (Sandbox Code Playgroud)
您可以存储第一个图的设置并在绘制第二个图后恢复它们。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
ser1 = pd.Series( ['tom','tom','bob','bob','nancy','zulu'])
ser2 = pd.Series( ['tom','bob'])
fig = plt.figure()
ax = sns.countplot(x=ser1, color='grey')
ticks = ax.get_xticks()
ticklabels = ax.get_xticklabels()
lim = ax.get_xlim()
sns.countplot(x=ser2, color='red')
ax.set_xlim(lim)
ax.set_xticks(ticks)
ax.set_xticklabels(ticklabels)
plt.show()
Run Code Online (Sandbox Code Playgroud)
另一种选择可能是先绘制第二个图,但将 zorder 设置为更高的值,以便这些条形出现在后面的图之前。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
ser1 = pd.Series( ['tom','tom','bob','bob','nancy','zulu'])
ser2 = pd.Series( ['tom','bob'])
fig = plt.figure()
ax = sns.countplot(x=ser2, color='red', zorder=2)
sns.countplot(x=ser1, color='grey')
plt.show()
Run Code Online (Sandbox Code Playgroud)
在更一般的情况下,您需要使用orderarument。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
ser1 = pd.Series( ['tom','tom','bob','bob','nancy', 'nancy' ,'zulu'])
ser2 = pd.Series( ['tom','nancy'])
order = ser1.append(ser2).unique()
fig = plt.figure()
ax = sns.countplot(x=ser2, color='red', order=order, zorder=2)
sns.countplot(x=ser1, color='grey', order=order)
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果您更愿意使用 matplotlib 的分类来创建绘图,则如下所示:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
ser1 = pd.Series( ['tom','tom','bob','bob','nancy', 'nancy' ,'zulu'])
ser2 = pd.Series( ['tom','nancy'])
u1, counts1 = np.unique(ser1.values, return_counts=True)
u2, counts2 = np.unique(ser2.values, return_counts=True)
fig, ax = plt.subplots()
ax.bar(u1,counts1, color='grey')
ax.bar(u2,counts2, color='red')
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2456 次 |
| 最近记录: |