为 pandas Dataframe Boxplot() 设置 y 轴刻度,3 个偏差?
Set y-axis scale for pandas Dataframe Boxplot(), 3 Deviations?
我试图每月制作一个箱线图图表区域,其中不同的箱线图按行业分组(并标记),然后让 Y 轴使用我指定的比例。
在一个完美的世界中,这将是动态的,我可以将轴设置为与总体平均值相差一定数量的标准偏差。我可以接受另一种动态设置 y 轴的类型,但我希望它成为所有创建的 'monthly' 分组箱线图的标准。我还不知道处理这个问题的最佳方法是什么,并且对智慧持开放态度 - 我所知道的是现在使用的数字对于图表来说意义重大。
我已经尝试了各种代码,但轴的缩放比例为零,下面的代码尽可能接近图表。
这是一些虚拟数据的 link:
https://drive.google.com/open?id=0B4xdnV0LFZI1MmlFcTBweW82V0k
对于我使用的代码 Python 3.5:
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('TkAgg')
import pylab
df = pd.read_csv('Query_Final_2.csv')
df['Ship_Date'] = pd.to_datetime(df['Ship_Date'], errors = 'coerce')
df1 = (df.groupby('Industry'))
print(
df1.boxplot(column='Gross_Margin',layout=(1,9), figsize=(20,10), whis=[5,95])
,pylab.show()
)
这是您的代码的清理版本,其中包含解决方案:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('Query_Final_2.csv')
df['Ship_Date'] = pd.to_datetime(df['Ship_Date'], errors = 'coerce')
df1 = df.groupby('Industry')
axes = df1.boxplot(column='Gross_Margin',layout=(1,9), figsize=(20,10),
whis=[5,95], return_type='axes')
for ax in axes.values():
ax.set_ylim(-2.5, 2.5)
plt.show()
关键是return将子图作为轴对象并单独设置限制。
为均值和标准差建立变量后,使用:
plt.ylim(ymin, ymax)
设置y轴。
谢谢@Padraig,
请注意,如果您使用 plt 作为没有子图的图形,您可以使用:
plt.ylim(ymin, ymax)
但是如果你想调整一个子图的 Y 轴,这个就可以了 (@AlexG)
ax.set_ylim(ymin, ymax)
例如,如果您的子图是 ax2,并且您希望 Y 轴从 0.5 到 1.0,您的代码将如下所示:
ax2.set_ylim(0.5, 1.0)
我试图每月制作一个箱线图图表区域,其中不同的箱线图按行业分组(并标记),然后让 Y 轴使用我指定的比例。
在一个完美的世界中,这将是动态的,我可以将轴设置为与总体平均值相差一定数量的标准偏差。我可以接受另一种动态设置 y 轴的类型,但我希望它成为所有创建的 'monthly' 分组箱线图的标准。我还不知道处理这个问题的最佳方法是什么,并且对智慧持开放态度 - 我所知道的是现在使用的数字对于图表来说意义重大。
我已经尝试了各种代码,但轴的缩放比例为零,下面的代码尽可能接近图表。
这是一些虚拟数据的 link: https://drive.google.com/open?id=0B4xdnV0LFZI1MmlFcTBweW82V0k
对于我使用的代码 Python 3.5:
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('TkAgg')
import pylab
df = pd.read_csv('Query_Final_2.csv')
df['Ship_Date'] = pd.to_datetime(df['Ship_Date'], errors = 'coerce')
df1 = (df.groupby('Industry'))
print(
df1.boxplot(column='Gross_Margin',layout=(1,9), figsize=(20,10), whis=[5,95])
,pylab.show()
)
这是您的代码的清理版本,其中包含解决方案:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('Query_Final_2.csv')
df['Ship_Date'] = pd.to_datetime(df['Ship_Date'], errors = 'coerce')
df1 = df.groupby('Industry')
axes = df1.boxplot(column='Gross_Margin',layout=(1,9), figsize=(20,10),
whis=[5,95], return_type='axes')
for ax in axes.values():
ax.set_ylim(-2.5, 2.5)
plt.show()
关键是return将子图作为轴对象并单独设置限制。
为均值和标准差建立变量后,使用:
plt.ylim(ymin, ymax)
设置y轴。
谢谢@Padraig, 请注意,如果您使用 plt 作为没有子图的图形,您可以使用:
plt.ylim(ymin, ymax)
但是如果你想调整一个子图的 Y 轴,这个就可以了 (@AlexG)
ax.set_ylim(ymin, ymax)
例如,如果您的子图是 ax2,并且您希望 Y 轴从 0.5 到 1.0,您的代码将如下所示:
ax2.set_ylim(0.5, 1.0)