颜色参数未更改绘图颜色。

huangapple go评论64阅读模式
英文:

color parameter isn't changing the plot color

问题

以下是代码部分的翻译:

import numpy as np
import pandas as pd
import seaborn as sns

sns.displot(pd.DataFrame(res), color='red', edgecolor=None, binwidth=.5, binrange=(3, 18+1));

res 是一个列表类型。

我原本期望柱状图是红色的,但它们显示为默认颜色。

我之前使用这段代码时没有问题。

英文:

Following is the code that doesn't work.

import numpy as np
import pandas as pd
import seaborn as sns

sns.displot(pd.DataFrame(res), color='red', edgecolor=None, binwidth=.5, binrange=(3, 18+1));

res is a list type.

I was expecting the bars to be red, but they are the default color.

I had no problem before with this code.

答案1

得分: 2

  • 设置单个分组的颜色的正确方法取决于如何或是否指定了 data=,以及是否指定了 x=y=

  • 对于 g = sns.histplot(data=df, color='r', legend=False),同样的问题也适用,如此图例所示。

    • 同样的实现也适用于 histplot
  • python 3.11.3matplotlib 3.7.1seaborn 0.12.2 中进行了测试

导入和数据

import numpy as np
import seaborn as sns

# 将随机正态数据存储为列表
np.random.seed(2023)
res = np.random.normal(loc=75, scale=5, size=1000).tolist()

# 创建一个数据框
df = pd.DataFrame(res)

# df.head() - 列标题是数字 0,而不是字符串 '0'

           0
0  78.558368
1  73.377575
2  69.990647
3  76.181254
4  74.489201

绘图实现

  • 传递 df,不指定 x= 的列名,需要传递一个 dict 或一个 listpalette
    • palette 也可以接受一个字符串,但字符串必须是有效的调色板名称,ValueError: 'r' 不是有效的调色板名称
g = sns.displot(data=df, palette={0: 'r'})
g = sns.displot(data=df, palette=['r'])
  • 传递 df,并为 x= 指定列名
g = sns.displot(data=df, x=0, color='r')
  • 将列传递给 x=
g = sns.displot(x=df[0], color='r')
  • 直接将 res 传递给 data=
g = sns.displot(data=res, color='r')
  • 直接将 res 传递给 x=
g = sns.displot(x=res, color='r')

颜色参数未更改绘图颜色。

颜色参数未更改绘图颜色。

英文:
  • The correct approach to setting the color of a single group, depends on how, or if, data= is specified, and if x=, or y=, is specified.
  • The same issue applies to g = sns.histplot(data=df, color='r', legend=False), as shown in this plot.
    • The same implementations work with histplot.
  • Tested in python 3.11.3, matplotlib 3.7.1, seaborn 0.12.2

Imports and Data

import numpy as np
import seaborn as sns

# random normal data as a list
np.random.seed(2023)
res = np.random.normal(loc=75, scale=5, size=1000).tolist()

# create a dataframe
df = pd.DataFrame(res)

# df.head() - the column header is the number 0, not string '0'

           0
0  78.558368
1  73.377575
2  69.990647
3  76.181254
4  74.489201

Plot Implementation

  • Pass df, and do not specify a column name for x=, requires passing a dict or a list to palette.
    • palette will also accept a string, but the string must be a valid palette name, ValueError: 'r' is not a valid palette name
  • The color saturation is different when using palette, compared to color, so pass alpha= (number 0 - 1) to adjust as needed.
g = sns.displot(data=df, palette={0: 'r'})
g = sns.displot(data=df, palette=['r'])
  • Pass df, and specify a column name for x=
g = sns.displot(data=df, x=0, color='r')
  • Pass the column to x=
g = sns.displot(x=df[0], color='r')
  • Pass res directly to data=
g = sns.displot(data=res, color='r')
  • Pass res directly to x=
g = sns.displot(x=res, color='r')

颜色参数未更改绘图颜色。

颜色参数未更改绘图颜色。

huangapple
  • 本文由 发表于 2023年5月29日 12:25:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/76354669.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定