我创建了pointplot()
,但无法更改x轴限制。尽管我的数据仅包含9个月,但我想在轴上显示所有12个月。
fig,ax = plt.subplots(figsize=(12,4))
sns.pointplot(data=tr_df, x='Month', y='numOfTrips', hue='Year', ax=ax, palette='nipy_spectral')
# sns.plt.xlim(0, 12) # AttributeError: module 'seaborn' has no attribute 'plt'
# ax.set_xlim=(0, 12) # does nothing
ax.set(xlim=(0, 12))
ax.set(title="Number of trips each month")
我在做什么错了?
编辑:用于创建绘图的数据
Year Month numOfTrips
0 2011 7 2608
1 2011 8 33579
2 2011 9 34756
3 2011 10 31423
4 2011 11 20746
5 2012 3 12240
6 2012 4 37637
7 2012 5 46056
8 2012 6 48315
9 2012 7 61659
10 2012 8 75443
11 2012 9 73012
12 2012 10 67372
13 2012 11 40862
14 2013 4 56625
15 2013 5 88105
16 2013 6 99301
17 2013 7 92504
答案 0 :(得分:2)
恕我直言,seaborn的pointplot
不是您想要的情节。
我建议您使用一个简单的lineplot
,然后尝试按预期设置xlims:
fig,ax = plt.subplots(figsize=(12,4))
sns.lineplot(data=tr_df, x='Month', y='numOfTrips', hue='Year', ax=ax, palette='nipy_spectral')
ax.set(xlim=(0, 12))
ax.set(title="Number of trips each month")
导致
但是,我还建议在此上下文中将xticks设置为具有 12 值的某些列表,而0 ... 12具有 13 ...; -)
答案 1 :(得分:1)
这有点骇人听闻,但似乎可行。我认为问题在于pointplot
忽略了轴的数值,并将其视为序数。
这段代码是一个手动替代:
fig,ax = plt.subplots(figsize=(12,4))
sns.pointplot(data=tr_df, x='Month', y='numOfTrips', hue='Year', ax=ax, palette='nipy_spectral')
ax.set_xticks(range(-3,10))
ax.set_xticklabels(range(12))
ax.set(title="Number of trips each month")
您基本上是在强迫绘图向左右添加更多刻度(使用负值),然后将所有标签重命名为1到12。
答案 2 :(得分:1)
看来问题在于您的数据仅在第3个月到第11个月之间变化。然后,月份索引从3开始,这对应于xmin
。
import seaborn as sns
import pandas as pd
import numpy as np
y = [2011,2012,2013]
years = []
months = []
trips = []
np.random.seed(0)
for ii in range(27):
years.append(y[ii / 9])
months.append(ii % 9+3)
trips.append(np.random.randint(0,10)+(ii / 12)*10)
tr_df = pd.DataFrame({'Month':months, 'Trips':trips, 'Year':years})
fig,ax = plt.subplots(figsize=(12,4))
sns.pointplot(data=tr_df, x='Month', y='Trips', hue='Year', ax=ax,
palette='nipy_spectral', scale=0.7)
ax.set(xlim=(0, 12))
ax.set(title="Number of trips each month")
plt.show()
这将产生
解决此问题的最简单方法(尽管它不能解决基础数据,并且在所有情况下都无法使用)只是手动设置限制以解决偏移量-
ax.set(xlim=(-0.5, 8.5))
哪个会给你
如果要包括比最小值(即0,1,2)短的月份,则可以手动设置xticks
和xticklabels
-
ax.set_xticks(range(-3,9))
ax.set_xticklabels(range(0,12))
哪个会给你