【问题标题】:Python ViolinPlotsPython 小提琴图
【发布时间】:2017-09-03 03:52:43
【问题描述】:

我目前正在尝试使用this data set 制作小提琴情节。

我希望 x 轴是总秒数的第一列(时间)。小提琴的左半边是 AskBidAvg 而右半边是 GrpAvg 是否有与使用 Hue 不同的方法,因为从示例中我看到它只需要一个具有 2 个唯一值的列。但是我们有很多不同的价值观。这导致了问题。我们使用 1 分钟增量,这是我从总秒数()中计算出来的。在 seaborn 或 matplotlib 中。 我正在使用的当前代码是:

sns.violinplot(x="Time",hue=["AskBidAvg", "GrpAvg"] ,inner ="quartiles" , linewidth= 1,split=True , data=df )

但是,它会抛出一个错误,即色调不能超过 2 个值。

【问题讨论】:

    标签: python matplotlib seaborn


    【解决方案1】:

    为了绘制您想要的内容,您需要对数据进行一些转换。

    你有时间列 - 一个很好 你的第二列应该包含 y 值(它将包含所有数字值)然后应该有另一列告诉你它是 AskBidAvg 还是 GrpAvg

        Time    variable    value
    0   18000   AskBidAvg   -0.000019
    1   18000   AskBidAvg   -0.000024
    2   18000   AskBidAvg   0.000019
    ...     ...     ...     ...
    76  18004   GrpAvg  -0.000019
    77  18005   GrpAvg  -0.000005
    78  18005   GrpAvg  -0.000012
    79  18005   GrpAvg  0.000002
    

    Pandas 有一个很好的功能可以为你做这件事。

    import pandas as pd
    df = pd.read_csv("/Users/james.natale/Downloads/yourdata.csv",index_col=False,header=0)
    df = pd.melt(df, id_vars=['Time'], value_vars=['AskBidAvg', 'GrpAvg'])
    
    import seaborn as sns
    sns.set(style="whitegrid", palette="pastel", color_codes=True)
    
    # Draw a nested violinplot and split the violins for easier comparison
    sns.violinplot(x=df['Time'], y=df['value'], hue=df['variable'], split=True,
                   inner="quart")
    sns.despine(left=True)
    

    【讨论】:

      猜你喜欢
      • 2016-08-20
      • 2017-08-30
      • 2021-03-07
      • 1970-01-01
      • 2021-10-23
      • 2021-08-27
      • 1970-01-01
      • 2020-08-23
      • 2017-08-10
      相关资源
      最近更新 更多