matplotlib 通过值复制的散点或气泡图

aij0ehis  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(98)

我有一组保存在二维列表中的数字序列,列表中的每个元素都是一个长度不同的子列表,比如1-10之间的数字,就像这样:

Lst = [[1,3,4,4,4,5],[2,7,2,3],[6,5,4,2,4],[2,4,5,7,5,4,2],[4,9,4,1,4,5,4]…]

字符串
有没有一种方法可以使用matplotlib在散点图或气泡图中绘制这些数据,并使用值重复?列表中的每个元素在X轴上占据一个位置,元素中的所有值都分布在相应的Y轴位置,值重复的次数越多,绘制的点的尺寸越大或颜色越深。
我已经知道如何使用matplotlib plot散点图,但是我不知道如何在一个Y轴上逐个绘制2D列表项。
谢谢
x1c 0d1x的数据

6pp0gazn

6pp0gazn1#

你可以在for循环中绘制每个子列表:

import matplotlib.pyplot as plt
from collections import Counter
import numpy as np
Lst = [[1,3,4,4,4,5],[2,7,2,3],[6,5,4,2,4],[2,4,5,7,5,4,2],[4,9,4,1,4,5,4]]
plt.figure()
for i, j in enumerate(Lst):
    occurences, sizes = list(zip(*list(Counter(j).items())))
    plt.scatter(i*np.ones(len(occurences))+1, occurences, s=np.array(sizes)*50)

字符串
输出:

编辑:完成积分请求也会变得更暗。使用这里的答案:Darken or lighten a color in matplotlib

import matplotlib.pyplot as plt
from collections import Counter
import numpy as np

def lighten_color(color, amount=0.5):
    """
    Lightens the given color by multiplying (1-luminosity) by the given amount.
    Input can be matplotlib color string, hex string, or RGB tuple.

    Examples:
    >> lighten_color('g', 0.3)
    >> lighten_color('#F034A3', 0.6)
    >> lighten_color((.3,.55,.1), 0.5)
    """
    import matplotlib.colors as mc
    import colorsys
    try:
        c = mc.cnames[color]
    except:
        c = color
    c = colorsys.rgb_to_hls(*mc.to_rgb(c))
    return colorsys.hls_to_rgb(c[0], 1 - amount * (1 - c[1]), c[2])

Lst = [[1,3,4,4,4,5],[2,7,2,3],[6,5,4,2,4],[2,4,5,7,5,4,2],[4,9,4,1,4,5,4]]
occurences, sizes = list(zip(*[list(zip(*list(Counter(j).items()))) for j in Lst]))
maximum = max(max(i) for i in sizes)

plt.figure()
for i, (j, k) in enumerate(zip(occurences, sizes)):
    plt.scatter(i*np.ones(len(j))+1, j, s=np.array(k)*50, color=[lighten_color('b', 2*m/maximum) for m in k])


输出:

相关问题