我目前正试图用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个值。
答案 0 :(得分:2)
为了绘制您想要的内容,您需要对数据进行一些转换。
你有时间列 - 一个没问题你的第二列应该保存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)