【发布时间】:2017-05-14 23:38:21
【问题描述】:
有一个很好的包to do it in R。在python中,我能想到的最好的就是这个,使用squarify包(灵感来自a post on how to do treemaps):
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns # just to have better line color and width
import squarify
# for those using jupyter notebooks
%matplotlib inline
df = pd.DataFrame({
'v1': np.ones(100),
'v2': np.random.randint(1, 4, 100)})
df.sort_values(by='v2', inplace=True)
# color scale
cmap = mpl.cm.Accent
mini, maxi = df['v2'].min(), df['v2'].max()
norm = mpl.colors.Normalize(vmin=mini, vmax=maxi)
colors = [cmap(norm(value)) for value in df['v2']]
# figure
fig = plt.figure()
ax = fig.add_subplot(111, aspect="equal")
ax = squarify.plot(df['v1'], color=colors, ax=ax)
ax.set_xticks([])
ax.set_yticks([]);
但是当我创建的不是 100 个而是 200 个元素(或其他非正方形数字)时,正方形会变得不对齐。
另一个问题是,如果我将 v2 更改为某个分类变量(例如,一百个 As、Bs、Cs 和 Ds),我会收到此错误:
无法将字符串转换为浮点数:'a'
那么,谁能帮我解决这两个问题:
- 如何解决非平方观测值的对齐问题?
- 如何在 v2 中使用分类变量?
除此之外,如果有任何其他 python 包可以更有效地创建华夫饼图,我真的很开放。
【问题讨论】:
-
-
谢谢@not_a_robot,这周我会试试散景。
-
200 不是平方数
-
真的,谢谢@JaredGoguen。我编辑了我的问题,询问如何处理非平方数字。
标签: python matplotlib seaborn bokeh waffle-chart