使用matplotlib的向日葵散点图

cyt*_*ome 5 python matplotlib

我有兴趣构建向日葵散点图(例如,如http://www.jstatsoft.org/v08/i03/paper [PDF链接]所示).在我编写自己的实现之前,有没有人知道现有的实现?我知道Stata和R中的函数,但我在matplotlib中寻找一个.

谢谢.

tom*_*m10 7

我不知道任何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()
Run Code Online (Sandbox Code Playgroud)

黄色是1瓣= 1,橙色1瓣= 5.

这里有一个明显的改进之处就是使用色彩映射.例如,您想预设颜色边界还是从数据中计算它们等?在这里我简单介绍了一下:我bins='log'只是为了获得我使用的特定样品的黄色和橙色细胞之间的合理比例; 我还对白色,黄色和橙色细胞(3和12)之间的边界进行了硬编码.

能够使用元组指定matplotlib中的标记特征,可以很容易地绘制所有不同的花瓣数.