我想将y轴绑定到xlim,只显示在所选xlim范围内的蜱(即y轴只应包括带蓝色条的滴答,并移除带有空白值的其他滴答)。图片附呈。包括用于复制的完整代码。谢谢
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import string
k = 5
N = 100
users = pd.DataFrame({'freq' : np.random.randint(k, k + 100 , size=N),
'id' : pd.Series(random.choice(string.ascii_uppercase) for _ in range(N)) })
fig, ax = plt.subplots()
ax.barh(users.id, users.freq)
labels = ax.get_xticklabels()
plt.setp(labels, rotation = 45, horizontalalignment = 'right')
ax.set(xlim = [90, 100], xlabel = 'Frequency', ylabel = 'ID',
title = 'Match')
ax.get_yticks()
ax.legend(labels = ('Match'), loc = 'upper right')图像:只显示与xlim相关的yticks,移除其余的

发布于 2020-03-27 15:46:00
用总和的频率“手动”创建数据,然后过滤和绘制它似乎是一个很好的方法。
若要获得所有频率至少为90的用户,请使用
grouped_users.loc[grouped_users.freq >= 90]为了限制最大值,需要一个布尔值和(&)和括号:
grouped_users.loc[(grouped_users.freq >= 90) & (grouped_users.freq <= 100)]一些演示代码可以与原始情节进行比较:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import string
np.random.seed(12345)
k = 5
N = 100
users = pd.DataFrame({'freq': np.random.randint(k, k + 100, size=N),
'id': np.random.choice(list(string.ascii_uppercase), N)})
x0 = 90
x1 = 100
grouped_users = users.groupby('id')[['id', 'freq']].sum()
grouped_users_filtered = grouped_users.loc[grouped_users.freq >= x0]
fig, (ax0, ax1) = plt.subplots(ncols=2)
ax0.barh(users.id, users.freq)
ax1.barh(grouped_users_filtered.index, grouped_users_filtered.freq)
for ax in (ax0, ax1):
ax.set(xlim=[x0, x1], xlabel='Frequency', ylabel='ID', title='Match')
plt.show()

https://stackoverflow.com/questions/60879752
复制相似问题