【问题标题】:How to make jitterplot on matplolib python如何在matplotlib python中制作抖动图
【发布时间】:2020-02-14 15:53:10
【问题描述】:

这是我的代码(改编自here):

df_1 = pd.DataFrame({'Cells' : np.arange(0,100), 'Delta_7' : np.random.rand(100,), 'Delta_10' : np.random.rand(100,), 'Delta_14' : np.random.rand(100,)}, columns = ['Cells','Delta_7', 'Delta_10', 'Delta_14'])



#figure
fig, ax1 = plt.subplots()
fig.set_size_inches(13, 10)



#c sequence
c = df_1['Delta_7']

#plot

plt.scatter(np.full((len(df_1), 1), 1), df_1['Delta_7'] , s = 50, c=c, cmap = 'viridis')
plt.scatter(np.full((len(df_1), 1), 2), df_1['Delta_10'] , s = 50, c=c, cmap = 'viridis')
plt.scatter(np.full((len(df_1), 1), 3), df_1['Delta_14'] , s = 50, c=c, cmap = 'viridis')
cbar = plt.colorbar()

我想用 matplotlib 制作一个漂亮的 jitterplot(比如 Rseaborn)。问题是我想根据每个单元格的“Delta_7”值给每个单元格一个颜色。绘制“Delta_10”和“Delta_14”时会保留这种颜色,我没有设法用seaborn做。 拜托,如果你有任何线索(python 包,编码技巧......),你能告诉我吗?

请,

【问题讨论】:

  • 当您尝试使用 seaborn 时,您是否使用了 hue 参数?
  • 嗨@tomjn!问题是我不知道如何在同一个 seaborn 图中绘制所有 'Delta's 列......但是,当我尝试 ax = sns.stripplot(y="Delta_7", hue='Cells', palette='viridis', data=df_1, dodge=True, jitter=0.2) 时,所有点都有相同的颜色

标签: python matplotlib scatter-plot


【解决方案1】:

点的位置可以从scatter返回的列表中获取。这些位置可以抖动,例如仅在 x 方向上。可能需要稍微扩展 x 轴的范围以显示每个移位的点。

下面是一些开始试验的代码:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

def jitter_dots(dots):
    offsets = dots.get_offsets()
    jittered_offsets = offsets
    # only jitter in the x-direction
    jittered_offsets[:, 0] += np.random.uniform(-0.3, 0.3, offsets.shape[0])
    dots.set_offsets(jittered_offsets)

df_1 = pd.DataFrame({'Cells': np.arange(0, 100),
                     'Delta_7': np.random.rand(100),
                     'Delta_10': np.random.rand(100),
                     'Delta_14': np.random.rand(100)})
fig, ax1 = plt.subplots()

columns = df_1.columns[1:]
c = df_1['Delta_7']
for i, column in enumerate(columns):
    dots = plt.scatter(np.full((len(df_1), 1), i), df_1[column], s=50, c=c, cmap='plasma')
    jitter_dots(dots)
plt.xticks(range(len(columns)), columns)
xmin, xmax = plt.xlim()
plt.xlim(xmin - 0.3, xmax + 0.3)  # make some room to show the jittered dots
cbar = plt.colorbar()
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多