为了账号安全,请及时绑定邮箱和手机立即绑定

为图上的多条线指定颜色

为图上的多条线指定颜色

冉冉说 2023-04-18 17:10:24
熊猫数据框分组图我有一个与上述问题类似的数据框,但它有大约 8 个股票代码。我已经定义了一个名为“颜色”的颜色列表,它与代码相对应,但是当我这样做时:df.groupby('ticker')['adj_close'].plot(color=colors)每个股票行情图上的所有线条都是相同的颜色(即“颜色”列表中的第一种颜色)。我想知道如何从列表“颜色”中指定每个行情代码的行以其对应的颜色?
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

  • pandas.groupby不是必需的,因为您没有聚合计算,例如mean.

  • 而不是使用.groupbyseaborn.lineplot使用hue='ticker'

    • Seaborn 是一个基于 matplotlib 的 Python 数据可视化库。它提供了一个高级界面,用于绘制有吸引力且信息丰富的统计图形。

  • Seaborn:选择调色板

    • 这个情节正在使用husl

    • husl可以在以下位置找到调色板的其他选项seaborn.husl_palette

  • 此答案与重复答案之间的区别:

    • 副本更改所有图的颜色。

    • 这将创建一个字典,将特定颜色映射到特定类别。

导入和示例数据

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

import pandas_datareader.data as web  # for getting stock data


# get test stock data

tickers = ['msft', 'aapl', 'twtr', 'intc', 'tsm', 'goog', 'amzn', 'fb', 'nvda']

df = pd.concat((web.DataReader(ticker, data_source='yahoo', start='2019-01-31', end='2020-07-21').assign(ticker=ticker) for ticker in tickers), ignore_index=False).reset_index()

选项1

基于唯一'ticker'值数量的地图颜色

# create color mapping based on all unique values of ticker

ticker = df.ticker.unique()

colors = sns.color_palette('husl', n_colors=len(ticker))  # get a number of colors

cmap = dict(zip(ticker, colors))  # zip values to colors


# plot

plt.figure(figsize=(16, 10))

sns.lineplot(x='Date', y='Adj Close', hue='ticker', data=df, palette=cmap)

//img1.sycdn.imooc.com/643e5eae00018e7809560588.jpg

选项 2

使用特定的颜色

colors = ['r', 'b', 'g', 'y', 'orange', 'purple', 'k', 'm', 'w']


plt.figure(figsize=(16, 10))

sns.lineplot(x='Date', y='Adj Close', hue='ticker', data=df, palette=colors)

//img2.sycdn.imooc.com/643e5ebf0001f22e09610584.jpg

df.head()

|    | Date                |   High |    Low |   Open |   Close |      Volume |   Adj Close | ticker   |

|---:|:--------------------|-------:|-------:|-------:|--------:|------------:|------------:|:---------|

|  0 | 2019-01-31 00:00:00 | 105.22 | 103.18 | 103.8  |  104.43 | 5.56364e+07 |     102.343 | msft     |

|  1 | 2019-02-01 00:00:00 | 104.1  | 102.35 | 103.78 |  102.78 | 3.55357e+07 |     100.726 | msft     |

|  2 | 2019-02-04 00:00:00 | 105.8  | 102.77 | 102.87 |  105.74 | 3.13151e+07 |     103.627 | msft     |

|  3 | 2019-02-05 00:00:00 | 107.27 | 105.96 | 106.06 |  107.22 | 2.73254e+07 |     105.077 | msft     |

|  4 | 2019-02-06 00:00:00 | 107    | 105.53 | 107    |  106.03 | 2.06098e+07 |     103.911 | msft     |

df.tail()

|      | Date                |   High |    Low |   Open |   Close |      Volume |   Adj Close | ticker   |

|-----:|:--------------------|-------:|-------:|-------:|--------:|------------:|------------:|:---------|

| 3334 | 2020-07-15 00:00:00 | 417.32 | 402.23 | 416.57 |  409.09 | 1.00996e+07 |      409.09 | nvda     |

| 3335 | 2020-07-16 00:00:00 | 408.27 | 395.82 | 400.6  |  405.39 | 8.6241e+06  |      405.39 | nvda     |

| 3336 | 2020-07-17 00:00:00 | 409.94 | 403.51 | 409.02 |  408.06 | 6.6571e+06  |      408.06 | nvda     |

| 3337 | 2020-07-20 00:00:00 | 421.25 | 406.27 | 410.97 |  420.43 | 7.1213e+06  |      420.43 | nvda     |

| 3338 | 2020-07-21 00:00:00 | 422.4  | 411.47 | 420.52 |  413.14 | 6.9417e+06  |      413.14 | nvda     |



查看完整回答
反对 回复 2023-04-18
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信