亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為圖上的多條線指定顏色

為圖上的多條線指定顏色

冉冉說 2023-04-18 17:10:24
熊貓數據框分組圖我有一個與上述問題類似的數據框,但它有大約 8 個股票代碼。我已經定義了一個名為“顏色”的顏色列表,它與代碼相對應,但是當我這樣做時:df.groupby('ticker')['adj_close'].plot(color=colors)每個股票行情圖上的所有線條都是相同的顏色(即“顏色”列表中的第一種顏色)。我想知道如何從列表“顏色”中指定每個行情代碼的行以其對應的顏色?
查看完整描述

1 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

  • pandas.groupby不是必需的,因為您沒有聚合計算,例如mean.

  • 而不是使用.groupby,seaborn.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)

http://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)

http://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 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號