第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Plotly:如何對不同的痕跡使用變換顏色?

Plotly:如何對不同的痕跡使用變換顏色?

慕工程0101907 2024-01-16 10:30:35
我正在使用 pandas 的數(shù)據(jù)繪制圖表。我有一個字典,其中鍵是日期,例如2020-10-26,值是 a pd.Dataframe,它有一個time列和 2 個數(shù)據(jù)列。.csv 格式的數(shù)據(jù)示例:for day, df in data.items():    day_name = datetime.datetime.strptime(day, "%Y-%m-%d").strftime("%A") # convert str to datetime, then to day    traces.append(go.Scatter(x=df["time"], y=df["SeriesA"], name=f"{day_name} SeriesA"))    traces.append(go.Scatter(x=df["time"], y=df["SeriesB"], name=f"{day_name} SeriesB"))有沒有辦法將每條線繪制為逐漸變化的色標中的不同顏色?理想情況下,我希望周一的所有痕跡都是不同的紅色陰影,周二的每條痕跡都是不同的黃色陰影。我能想到的唯一方法是手動將十六進制值輸入到列表中,然后為一周中的每一天建立一個索引。然后在繪制軌跡時執(zhí)行以下操作:# If statement for every day of the weekif day_name == "Monday":    color = red_hex_values[monday_idx]    monday_idx += 1traces.append(go.Scatter(x=df["time"], y=df["SeriesA"], name=f"{day_name} SeriesA", color=color))但這似乎是一種非常混亂的方法。
查看完整描述

1 回答

?
aluckdog

TA貢獻1847條經(jīng)驗 獲得超7個贊

介紹

你的問題可以利用更好的焦點,因為它實際上是兩個問題:

  1. 如何制作自定義色標

  2. 如何在繪圖中使用平日的變換顏色。

我冒昧地或多或少地專門關(guān)注后一部分。盡管我將簡要介紹前者的一些選項 - 如果您愿意,我們可以稍后再討論。

回答

這是一個有趣的問題,我認為我已經(jīng)通過對存儲在字典中的值的指定色階的循環(huán)迭代找到了一個可行的解決方案,daymap其中鍵是工作日名稱:

daymap?=?{'Monday':cycle(px.colors.sequential.Reds),?
??????????'Tuesday':cycle(px.colors.sequential.Greens),
?????????}

px.colors.sequential.Reds?并且px.colors.sequential.Greens是內(nèi)置的繪圖色標。你特別要求黃色。但這是目前必須做的。

我已經(jīng)進行了設(shè)置,以便weekday, color scale您設(shè)置的任何定義對都在圖中分配,并且您選擇不定義的所有工作日名稱都被賦予您使用自定義函數(shù)指定的單個自定義顏色colfx()

def colfx(daymap, day_name, default_color):

? ? if day_name in daymap.keys():

? ? ? ? return next(daymap[day_name])

? ? else:

? ? ? ? return default_color

下面的完整代碼片段以及 60 天的隨機數(shù)據(jù)樣本將使用上述規(guī)范以及其他一些細節(jié)生成下面的圖 1。


地塊1

https://img1.sycdn.imooc.com/65a5ea7b0001c84106460273.jpg

圖 2 是通過在 中添加另一個鍵、值對daymap并將默認顏色更改為colfx()來生成的'rgba(150,150,150, 0.2)'。我發(fā)現(xiàn)使用rgba顏色作為默認顏色很實用,因為上一個術(shù)語0.2可以讓您輕松設(shè)置顏色的不透明度。

地塊2

https://img1.sycdn.imooc.com/65a5ea8a0001901406510268.jpg

完整代碼

import pandas as pd

import numpy as np

import plotly.graph_objects as go

import plotly.express as px

from itertools import cycle


# data

obs = 60

dates = pd.date_range(start='2020-01-01', periods=obs)

random = np.random.RandomState(0)

df = pd.DataFrame({'data': np.random.uniform(low=0, high=100, size=obs).tolist()}, index=dates)


# custom function to assign next color in a color sequence

# for each new day defined in the dict daymap

def colfx(daymap, day_name, default_color):

? ? if day_name in daymap.keys():

? ? ? ? return next(daymap[day_name])

? ? else:

? ? ? ? return default_color


# color specifications for weekday

daymap = {'Monday':cycle(px.colors.sequential.Reds),

? ? ? ? ? ?'Tuesday':cycle(px.colors.sequential.Greens),

? ? ? ? ? ?'Friday':cycle(px.colors.sequential.thermal)

? ? ? ? ?}

? ??

# container for weekday names added to the figure legend

# if the weekday names has ALREADY been added to the legend,

# then no further additions are made

fignames = []


fig=go.Figure()

for row in df.iterrows():

? ? day_name=row[0].strftime("%A")

? ? fignames = [d.name for d in fig.data]

? ? fig.add_bar(x=[row[0]],

? ? ? ? ? ? ? ? y=[row[1]['data']],

? ? ? ? ? ? ? ? marker_color=colfx(daymap=daymap, day_name = day_name, default_color='rgba(150,150,150, 0.2)'),

? ? ? ? ? ? ? ? name=day_name,

? ? ? ? ? ? ? ? legendgroup = day_name,

? ? ? ? ? ? ? ? showlegend = False if day_name in fignames else True

? ? ? ? ? ? ? ?)

? ??

fig.show()



查看完整回答
反對 回復 2024-01-16
  • 1 回答
  • 0 關(guān)注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號