Matplotlib与squarify问题:同一figure中两个treemap显示在同一axes
解决Matplotlib+squarify在同一Figure中显示两个独立Treemap的问题
你的代码有几个关键问题导致两个treemap重叠在同一个axes里,逐一修正如下:
变量名重复覆盖:你定义完第一组数据后,又用相同的变量名
http_return_status_label_1和http_return_status_count_1覆盖了它们,第二组数据应该命名为http_return_status_label_2和http_return_status_count_2,否则第一组数据会丢失。未指定绘图的目标Axes:
squarify.plot()默认会使用当前活跃的Matplotlib Axes对象,如果你不手动指定ax参数,两次绘图都会默认画到同一个Axes里。你不需要给ax1.subplot赋值,直接在squarify.plot()里传入ax=ax1和ax=ax2即可指定各自的绘图区域。全局关闭轴的问题:
plt.axis('off')会关闭整个Figure的轴,应该分别对每个子图调用axis('off'),避免影响布局。
修正后的完整代码:
import matplotlib.pyplot as plt import squarify # 第一组数据 http_return_status_label_1 = ['200','300','500'] http_return_status_count_1 =[4,8,12] # 第二组数据,修正变量名 http_return_status_label_2 = ['2000','3000','5000'] http_return_status_count_2 =[40,88,102] # 创建1行2列的子图布局 fig, (ax1, ax2) = plt.subplots(1, 2, subplot_kw={'aspect': 'equal'}) # 分别指定ax参数绘制到对应子图 squarify.plot(sizes=http_return_status_count_1, label=http_return_status_label_1, alpha=.8, ax=ax1) squarify.plot(sizes=http_return_status_count_2, label=http_return_status_label_2, alpha=.8, ax=ax2) # 关闭每个子图的轴 ax1.axis('off') ax2.axis('off') plt.tight_layout() # 自动调整子图间距 plt.show()
这样就能在同一个Figure里得到两个独立的treemap了。
内容的提问来源于stack exchange,提问作者8oris
相关产品推荐
相关产品推荐

