【问题标题】:Plotting arrays with different lengths in seaborn在seaborn中绘制不同长度的数组
【发布时间】:2021-08-17 04:38:22
【问题描述】:

我有一个数据框,我想用它制作条形图,该数组包含以下内容

   Symbol  Avg.Sentiment  Weighted  Mentions                                          Sentiment
0     AMC           0.14      0.80       557  [-0.38, -0.48, -0.27, -0.42, 0.8, -0.8, 0.13, ...
2     GME           0.15      0.26       175  [-0.27, 0.13, -0.53, 0.65, -0.91, 0.66, 0.67, ...
1      BB           0.23      0.29       126  [-0.27, 0.34, 0.8, -0.14, -0.39, 0.4, 0.34, -0...
11    SPY          -0.06     -0.03        43  [0.32, -0.38, -0.54, 0.36, -0.18, 0.18, -0.33,...
4    SPCE           0.26      0.09        35  [0.65, 0.57, 0.74, 0.48, -0.54, -0.15, -0.3, -...
13     AH           0.06      0.02        33  [0.62, 0.66, -0.18, -0.62, 0.12, -0.42, -0.59,...
12   PLTR           0.16      0.05        29  [0.66, 0.36, 0.64, 0.59, -0.42, 0.65, 0.15, -0...
15   TSLA           0.13      0.03        24  [0.1, 0.38, 0.64, 0.42, -0.32, 0.32, 0.44, -0....

以此类推,'Sentiment'列表中元素的数量与提及的数量相同,我想制作一个以Symbol为x轴,sentiment为y轴的条形图,我相信我遇到的问题是由于列表的长度不同,我得到的实际错误读数是

ValueError: setting an array element with a sequence.

我试图用来创建条形图的代码是这样的

def symbolSentimentVisualization(dataset):
    sns.stripplot(x='Symbol',y='Sentiment',data=dataset.loc[:9])
    plt.show()

我猜我的问题的另一部分与 numpy 尝试在放入 seaborn 绘图之前设置不同长度的多维数组有关,但不是 100%,如果解决方案是绘制一行一段时间,然后合并肯定会起作用的情节,但我不确定我应该调用什么来做到这一点,因为尝试以下方法似乎也不起作用。

def symbolSentimentVisualization(dataset):
    sns.stripplot(x=dataset['Symbol'][0],y=dataset['Sentiment'][0],data=dataset.loc[:9])
    plt.show()

【问题讨论】:

    标签: python arrays pandas numpy seaborn


    【解决方案1】:

    IIUC explode 'Sentiment' 首先是情节:

    df = df.explode('Sentiment')
    ax = sns.stripplot(x="Symbol", y="Sentiment", data=df)
    

    样本数据:

    np.random.seed(5)
    df = pd.DataFrame({
        'Symbol': ['AMC', 'GME', 'BB', 'SPY', 'SPCE'],
        'Mentions': [557, 175, 126, 43, 35]
    })
    
    df['Sentiment'] = df['Mentions'].apply(lambda x: (np.random.random(x) * 2) - 1)
    
      Symbol  Mentions                                          Sentiment
    0    AMC       557  [-0.556013657820521, 0.7414646123547528, -0.58...
    1    GME       175  [-0.5673003921341209, -0.6504850189478857, 0.1...
    2     BB       126  [0.7771316020052821, 0.26579994709269994, -0.4...
    3    SPY        43  [-0.5966607678089173, -0.4473484233894889, 0.7...
    4   SPCE        35  [0.7934741289205556, 0.17613102678923398, 0.58...
    

    结果图:


    带有示例数据的完整工作示例:

    import numpy as np
    import pandas as pd
    import seaborn as sns
    from matplotlib import pyplot as plt
    
    np.random.seed(5)
    df = pd.DataFrame({
        'Symbol': ['AMC', 'GME', 'BB', 'SPY', 'SPCE'],
        'Mentions': [557, 175, 126, 43, 35]
    })
    
    df['Sentiment'] = df['Mentions'].apply(lambda x: (np.random.random(x) * 2) - 1)
    
    df = df.explode('Sentiment')
    ax = sns.stripplot(x="Symbol", y="Sentiment", data=df)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多