我有興趣構建向日葵散點圖(例如,http://www.jstatsoft.org/v08/i03/paper [PDF鏈接]中所述)。在我編寫自己的實現之前,有沒有人知道現有的實現?我意識到Stata和R中的函數,但我正在matplotlib中尋找一個函數。向日葵散點圖使用matplotlib
謝謝。
我有興趣構建向日葵散點圖(例如,http://www.jstatsoft.org/v08/i03/paper [PDF鏈接]中所述)。在我編寫自己的實現之前,有沒有人知道現有的實現?我意識到Stata和R中的函數,但我正在matplotlib中尋找一個函數。向日葵散點圖使用matplotlib
謝謝。
我不知道任何matplotlib的實現,但它並不難做到。在這裏,我讓hexbin
執行計數,然後經過每個單元,並添加花瓣相應的號碼:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
np.random.seed(0)
n = 2000
x = np.random.standard_normal(n)
y = 2.0 + 3.0 * x + 4.0 * np.random.standard_normal(n)
cmap = colors.ListedColormap(['white', 'yellow', 'orange'])
hb = plt.hexbin(x,y, bins='log', cmap=cmap, gridsize=20, edgecolor='gray')
plt.axis([-2, 2, -12, 12])
plt.title("sunflower plot")
counts = hb.get_array()
coords = hb.get_offsets()
for i, count in enumerate(counts):
x, y = coords[i,:]
count = int(10**count)
if count>3 and count<=12:
n = count // 1
if n>1:
plt.plot([x], [y], 'k.')
plt.plot([x], [y], marker=(n, 2), color='k', markersize=18)
if count>12:
n = count // 5
if n>1:
plt.plot([x], [y], 'k.')
plt.plot([x], [y], marker=(n, 2), color='k', markersize=18)
plt.show()
這裏是黃色花瓣1 = 1,和橙色花瓣1 = 5
這裏有一個顯而易見的改進之處是使用顏色映射。例如,你想要預設顏色邊界還是從數據等中計算顏色邊界?在這裏,我只是嘲笑了一下:我使用bins='log'
只是爲了得到我使用的特定樣品的黃色和橙色細胞之間的合理比例;並且我硬編碼了白色,黃色和橙色細胞之間的邊界(3和12)。
能夠使用元組來指定matplotlib中的標記特徵使繪製所有不同的花瓣數真的很容易。
優秀!經過一些調整,這種方法應該適用於我的應用程序。 – cytochrome
太好了。我編輯了最後幾段,讓一些事情更清楚。 (如果你發佈,看看你最終會看到什麼會很有趣。) – tom10
你的數據看起來像什麼?具體而言,因爲數據沿着六邊形網格定位,所以向日葵圖不是真正的散點圖。你的定位是在一個六角網格上,還是你想在非網格位置上的向日葵形狀? – tom10
正如在上面提到的論文中給出的例子,我的數據是「分散的」。當然,這些數據必須放入合適的六邊形網格單元中。 – cytochrome
查看['plt.hexbin'](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hexbin)直方圖,示例在這裏:http://stackoverflow.com/a/2371812/1643946。在頂部沒有標記,所以需要一些工作 – Bonlenfum