【发布时间】:2020-02-26 11:44:03
【问题描述】:
这可能是小事,但我怎样才能使我的条形图输出可读。显然,我需要删除条形高度上的 +sign 以及 小数,以便我只保留整数。这是我的数据:
# intialise data of lists.
data = {'Hospital_name':['Jootrh Hospital', 'Jootrh Hospital', 'Embu Hospital', 'Embu Hospital','Bungoma Hospital', 'Bungoma Hospital', 'Keru Hospital', 'Keru Hospital'],
'periodname':["18-Jul", "18-Aug", "18-Jul", "18-Aug","18-Jul", "18-Aug", "18-Jul", "18-Aug"], 'normal deliveries':[452, 458, "NAN", 45,498, 466, "NAN", 450],
'caesarian sections':[67.0, 99.0, 13.0, 13.0,60.0, 19.0, 73.0, "NAN"], 'breach delivery':[10.0, "NAN", 13.0, 137.0,100.0, "NAN", "NAN" ,197.0],
'assisted vd':["NAN", "NAN", 1.0, 37.0,1.0, "NAN", 1.0, 37.0]}
# Create DataFrame
df = pd.DataFrame(data)
df
这是我的代码,我正在使用 jupyter notebook:
import numpy as np
import matplotlib.pyplot as plt
grouped = df.groupby('Hospital_name')
ncols=1
nrows = int(np.ceil(grouped.ngroups/ncols))
fig, axes = plt.subplots(nrows=nrows, ncols=ncols,figsize=(10,40), constrained_layout=True)
x_offset = 0.02
y_offset = 0.02
for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
temp = grouped.get_group(key).replace("NAN",0).plot(kind='bar',ax=ax, title=key)
for bar in temp.patches:
b = bar.get_bbox()
val = "{:+.2f}".format(b.y1 + b.y0)
ax.annotate(val, ((b.x0 + b.x1)/2 + x_offset, b.y1 + y_offset))
ax.legend()
plt.show()
有人可以帮助我的输出看起来可读吗?请注意,我确实需要那些条形高度数字,最终结果将保存在可能是 pdf 的文档中。 +号和小数可以去掉
【问题讨论】:
-
一些想法。您可以使用tick_params (matplotlib.org/3.1.1/api/_as_gen/…) 旋转xticklabels,您可以使用tight_layout (matplotlib.org/3.1.1/api/_as_gen/…) 改进图形的布局,并使用subplots_adjust (matplotlib.org/3.1.1/api/_as_gen/…) 进一步调整子图周围的空间,您可以使图形更宽带 figsize(第一个值宽度,第二个值高度)。
-
@Patol75 您是否可以复制它的样本。我已经尝试了一些选项,但似乎我错过了一些东西
标签: python pandas matplotlib jupyter-notebook