簡體   English   中英

Python-分類氣泡圖

[英]Python - Categorical bubble plot

我有一個12x17數據框,並想要創建一個類似於以下內容的分類氣泡圖:

https://i.stack.imgur.com/IvD58.png (來自用於分類研究的分類氣泡圖

我的數據框基本上是這樣的:

#      A     B     C
# X   0.3   0.2   0.4
# Y   0.1   0.4   0.1

我不能使用matplotlib.scatter,因為它不進行分類輸入,並且創建假值也不起作用,因為它不是n * n。 可以嗎 我不知道。 我發現seaborn.stripplot需要一個分類輸入,但是所有氣泡的大小都相同,所以我被卡住了。

有什么想法可以在python中創建這樣的情節嗎? 非常感謝。

我認為scatter非常適合創建此類分類氣泡圖。

創建數據框:

import pandas as pd
df = pd.DataFrame([[.3,.2,.4],[.1,.4,.1]], columns=list("ABC"), index=list("XY"))

選項1:解壓DataFrame

dfu = df.unstack().reset_index()
dfu.columns = list("XYS")

這會創建一個像

   X  Y    S
0  A  X  0.3
1  A  Y  0.1
2  B  X  0.2
3  B  Y  0.4
4  C  X  0.4
5  C  Y  0.1

您可以按列進行繪制。 由於散點的大小是點,因此需要將S列乘以某個較大的數字(例如5000)才能獲得大氣泡。

import matplotlib.pyplot as plt
dfu["S"] *= 5000
plt.scatter(x="X", y="Y", s="S", data=dfu)
plt.margins(.4)
plt.show()

選項2:創建網格

使用例如numpy,可以創建數據框的列和索引的網格,從而可以繪制出扁平化網格的散點圖。 同樣,需要將數據幀值乘以一個較大的數字。

import numpy as np
import matplotlib.pyplot as plt

x,y = np.meshgrid(df.columns, df.index)

df *= 5000
plt.scatter(x=x.flatten(), y=y.flatten(), s=df.values.flatten())
plt.margins(.4)
plt.show()

在這兩種情況下,結果看起來像

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM