pandas 如何在python中为UpSet图添加一个标题并更改其他的图美学?

ki1q1bka  于 2023-01-11  发布在  Python
关注(0)|答案(1)|浏览(123)

我已经安装并导入了以下内容(使用Google Colab):

!pip install upsetplot

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt  
import upsetplot
from upsetplot import generate_data, plot
from upsetplot import UpSet
from upsetplot import from_contents

版本:

  • Python 3.8.16语言
  • 麻木版本:1.21.6
  • Pandas版:1.3.5
  • matplotlib版本:3.2.2
  • 干扰图0.8.0

...并定义了图颜色:

plot_colour = "#4F84B9"

我有以下Pandas Dataframe :

df = pd.DataFrame({'File':['File_1', 'File_2', 'File_3'], 
                   'A':[1,1,0],
                   'B':[0,1,1],
                   'C':[1,0,1]})

我重新塑造它的形状,为"扰动"图做准备:

files_labelled_A = set(df.loc[df["A"]==1, "File"])
files_labelled_B = set(df.loc[df["B"]==1, "File"])
files_labelled_C = set(df.loc[df["C"]==1, "File"])

contents = {'A': files_labelled_A,
            'B': files_labelled_B,
            'C': files_labelled_C}

from_contents(contents)

我成功创建并查看了"扰动"图:

plt = UpSet(from_contents(contents), 
            subset_size='count', 
            facecolor=plot_colour).plot()

如何像处理matplotlib图一样添加标题并更改其他图美学?当我尝试添加:

plt.title('my title here')

我得到一个错误:
属性错误:"dict"对象没有属性"title"
我在https://upsetplot.readthedocs.io/en/latest/auto_examples/plot_sizing.html中找到了一些指导,它使用不同的方法创建图:

example = generate_counts()
print(example)

plot(example)
plt.suptitle('Defaults')
plt.show()

...然后以典型的matplotlib方式成功地修改美学,例如:

fig = plt.figure(figsize=(10, 3))
plot(example, fig=fig, element_size=None)
plt.suptitle('Setting figsize explicitly')
plt.show()

...但我无法遵循相同的方法,因为我不知道如何使用generate_counts()创建"示例"数据。我不知道如何对我的数据使用相同的方法。
有人能帮我弄清楚如何:
(1)使用generate_counts()的方法,或者(2)修改我的方法,以便我可以改变matplotlib的美学(例如添加标题)?
使用我的数据的完整代码示例将受到赞赏,而不仅仅是对要做什么的描述。

k3bvogb1

k3bvogb11#

您正在隐藏plt模块,请用途:

d = UpSet(from_contents(contents), 
          subset_size='count', 
          facecolor=plot_colour).plot()

它为d(不是plt!)指定一个字典,其轴为:

{'matrix': <AxesSubplot: >,
 'shading': <AxesSubplot: >,
 'totals': <AxesSubplot: >,
 'intersections': <AxesSubplot: ylabel='Intersection size'>}

然后,您仍然可以使用plt,但也可以使用以下命令访问轴:

plt.title('my title here')
d['totals'].set_title('TITLE')

相关问题