首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >海运调色板:如何选择哪个部分为中心(例如,哪一端是红色和哪一端是蓝色)?

海运调色板:如何选择哪个部分为中心(例如,哪一端是红色和哪一端是蓝色)?
EN

Stack Overflow用户
提问于 2018-12-07 20:55:20
回答 3查看 4K关注 0票数 1

我想要一个熊猫数据的猫,其中包含一个数字值的所有时间一年。它有3列:小时、工作日和价值。我的情节是这样的:

代码语言:javascript
运行
复制
cat_weekdayhour = plt.figure(figsize=(12,12))
cat_weekdayhour = sns.set_context("paper")
cat_weekdayhour = sns.set(style="darkgrid", font_scale=.6)

weekdayhour.shape
cat_weekdayhour = sns.catplot(x="Weekday", y="Value", hue="Hour", kind="swarm", palette="coolwarm", data=dataframe)

这给了我以下的情节,但我不喜欢一天中的早期时间(如早上0-4点)是非常蓝色的,然后最后几个小时(晚上8-11分钟)是红色的。而不是,我想把的红色调到白天的,然后让整晚都是蓝色的。这能办到吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-07 21:39:29

创造你自己的托盘,结合“冷却温暖”和它受人尊敬的托盘。我有一个较旧版本的seaborn,所以我将使用swarmplot来说明

样本数据

代码语言:javascript
运行
复制
import seaborn as sns
import numpy as np
import pandas as pd

n = 1000
np.random.seed(123)
df = pd.DataFrame({'Weekday': ['Friday']*n,
                   'Hour': np.random.randint(0,24,n),
                   'Value': np.random.randint(40,150,n)})

冷暖调色板

代码语言:javascript
运行
复制
sns.swarmplot(x="Weekday", y="Value", hue="Hour", palette="coolwarm", data=df)

定制调色板

代码语言:javascript
运行
复制
# 24 hours so split evenly between the two
mypal = sns.color_palette("coolwarm", 12) + sns.color_palette("coolwarm_r", 12)
sns.swarmplot(x="Weekday", y="Value", hue="Hour", palette=mypal, data=df)

票数 3
EN

Stack Overflow用户

发布于 2018-12-07 21:57:40

一种方法是创建一个新的彩色地图,我们将其命名为"cycliccoolwarm",它包含原始的颜色映射和反转的颜色映射。然后,使用这个新的颜色地图是一样容易的任何其他现有的彩色地图。

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import seaborn as sns
import numpy as np
import pandas as pd

df = pd.DataFrame({"Day" : np.repeat(np.array(list("1234567")),24*40 ),
                   "Hour" : np.tile(np.arange(0,24), 7*40).astype(int),
                   "Value" : np.random.rand(7*24*40)*180})
df['Hour'] = df['Hour'].apply('{:02d}:00'.format)

cmap_orig = plt.get_cmap("coolwarm")
colors = cmap_orig(np.concatenate((np.linspace(0,1,128), np.linspace(1,0,128))))
cmap = ListedColormap(colors)
plt.cm.register_cmap("cycliccoolwarm", cmap=cmap)

g = sns.catplot(x="Day", y="Value", hue="Hour", kind="swarm", palette="cycliccoolwarm", data=df)

plt.show()

票数 3
EN

Stack Overflow用户

发布于 2018-12-07 21:03:15

您正在使用dataframe中的Hour列作为着色源。相反,您可以引入一个新列,该列包含从小时到12:00的值:

代码语言:javascript
运行
复制
dataframe['Color'] = -abs(dataframe['Hour'] - 12)

所以12:00变成0,24:00变成-12。6:00和6:00将变成-6。这样,中午将以最高值(红色→0)表示,而午夜将以最低值(蓝色→-12)表示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53676708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档