如何按类别绘制一维散点图/或在箱形图上添加点

时间:2020-07-08 13:37:39

标签: pandas matplotlib scatter-plot boxplot

我目前使用熊猫从数据库中读取数据来实现该箱线图。

我的例子是:

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

experiments = ['exp1', 'exp2', 'exp3']
test_data = pd.DataFrame({ "value":np.random.normal(0.8,0.2,20)} )
test_data["name"] = np.random.choice(experiments, size=20)

test_data.boxplot(column='value', by='name', figsize=(15,12))

boxplots 这并不是我想要的,我真的想在图表上分散显示所有点。

在另一个问题中找到了我想要的输出示例,但是我缺乏将其正确应用于格式不同的数据框的技能....:

data = pd.DataFrame({ "A":np.random.normal(0.8,0.2,20),
                      "B":np.random.normal(0.8,0.1,20), 
                      "C":np.random.normal(0.9,0.1,20)} )

data.boxplot()

for i,d in enumerate(data):
    y = data[d]
    x = np.random.normal(i+1, 0.04, len(y))
    plt.plot(x, y, mfc = ["orange","blue","yellow"][i], mec='k', ms=7, marker="o", linestyle="None")

plt.hlines(1,0,4,linestyle="--")

boxplot with scatter

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

类似的事情会起作用:

test_data.boxplot(column='value', by='name', figsize=(15,12))

for i, (k,d) in enumerate(test_data.groupby('name')):
    y = d['value']
    x = np.random.normal(i+1, 0.04, len(y))
    plt.plot(x, y, mfc = ["orange","blue","yellow"][i], mec='k', ms=7, marker="o", linestyle="None")

输出:

enter image description here