我有一个 pandas 数据框df,其中包含列x(分类)、y和z(均为浮点数)。
这是我的条形图。
sns.barplot(data=df, x=x, y=y)
Run Code Online (Sandbox Code Playgroud)
如何根据列的值设置条形的调色板z?我想设置一个 Matplotlib 样式调色板,例如magma或RdYlBu。基本上,就像设置hue参数一样,但是使用标量变量。
提前致谢!
我目前正在使用 Seaborn 和 Pandas 来可视化数据集。我有一些与时间相关的数据,我想用条形图绘制它们。
然而,我在 Seaborn 中遇到了两个问题:
我在正常的 Matplotlib 中找到了解决问题的方法,即:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np
N = 20
np.random.seed(2022)
dates = pd.date_range('1/1/2014', periods=N, freq='m')
df = pd.DataFrame(
data={'dt':dates, 'val': np.random.randn(N)}
)
fig, ax = plt.subplots(figsize=(10, 6))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
ax.bar(df['dt'], df['val'], width=25, align='center')
Run Code Online (Sandbox Code Playgroud)
然而,我已经在 Seaborn 中完成了大部分图表,并且我希望保持一致。一旦我将之前的代码转换为 Seaborn,我就失去了格式化日期的能力:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import …Run Code Online (Sandbox Code Playgroud) 如何创建一个包含 2 个 seaborn 地块(子图)的地块
\n\n如何将 2 个seaborn 地块合并为 1 个?
\n\nplt.figure(figsize = (12, 6))\nax = sns.scatterplot(x = model1.fittedvalues, y = model1.resid)\nplt.grid()\nax.axhline(y=0, color=\'r\', linewidth=4) \nax.set_xlabel("vysv\xc4\x9btlovan\xc3\xa1 prom\xc4\x9bnn\xc3\xa1");\nax.set_ylabel("residua");\n\n\nplt.figure(figsize = (12, 6))\nax = sns.distplot(a = model1.resid, bins = 40, norm_hist=True,)\nplt.grid()\nax.set_title("Histogram rezidu\xc3\xad", fontsize = 25);\n\nRun Code Online (Sandbox Code Playgroud)\n 我有一个网络图。
每个节点都是一个案例,每条边都是一个 CPT。
我曾经community.best_partition将图表分成四个社区(用颜色标记)。
为了更好地可视化我使用的每个社区中共享的 CPT 和案例量plt.subplots,并sns.heatmap创建了四个社区之间具有相似匹配颜色的热图。
生成热图的代码:
fig, axs = plt.subplots(nrows=4, figsize=(16,8), sharex=True)
cmaps = ['Blues', 'Oranges', 'Greens', 'Reds']
comms = range(4)
for ax, cmap, comm in zip(axs, cmaps, comms):
sns.heatmap(
data=_.loc[[comm]],
ax=ax,
cmap=cmap,
annot=True,
annot_kws={
'fontsize' : 12
},
fmt='g',
cbar=False,
robust=True,
)
ax.set_ylabel('Community')
ax.set_xlabel('');
Run Code Online (Sandbox Code Playgroud)
问题
有没有办法按sns.heatmap行(在本例中为社区)指定颜色,而无需创建 4 个单独的热图?
这是一些示例数据:
cpt 52320 52353 52310 49568 50432 52234 52317 50435 52354 52332
comm
0 NaN 3.0 NaN 1.0 1.0 NaN 2.0 …Run Code Online (Sandbox Code Playgroud) 该参数linewidth调整每个单元之间的空间大小。例如:
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np; np.random.seed(0)
uniform_data = np.random.rand(2000, 6)
ax = sns.heatmap(uniform_data)
Run Code Online (Sandbox Code Playgroud)
plt.clf()
ax = sns.heatmap(uniform_data, linewidth=0.0001)
Run Code Online (Sandbox Code Playgroud)
您只能看到白色,因为我的热图形状明显倾斜:2000 行和 6 列。我想在每个单元格列之间有一个垂直的空白。因此,我需要想办法单独调整垂直线宽。如何才能做到这一点?
我正在使用“iris.csv”数据制作箱线图。我试图通过测量(即花瓣长度、花瓣宽度、萼片长度、萼片宽度)将数据分解为多个数据框,然后在 forloop 上绘制箱线图,从而添加子图。
最后,我想立即为所有箱线图添加一个通用图例。但是,我做不到。我已经使用几个 stackoverflow 问题尝试了几个教程和方法,但我无法修复它。
这是我的代码:
import seaborn as sns
from matplotlib import pyplot
iris_data = "iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(iris_data, names=names)
# Reindex the dataset by species so it can be pivoted for each species
reindexed_dataset = dataset.set_index(dataset.groupby('class').cumcount())
cols_to_pivot = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width']
# empty dataframe
reshaped_dataset = pd.DataFrame()
for var_name in cols_to_pivot:
pivoted_dataset = reindexed_dataset.pivot(columns='class', values=var_name).rename_axis(None,axis=1)
pivoted_dataset['measurement'] = var_name
reshaped_dataset = reshaped_dataset.append(pivoted_dataset, ignore_index=True)
## Now, lets spit the dataframe into …Run Code Online (Sandbox Code Playgroud) 我想使用 subplots 绘制 2 个数字。我有一个数据框(simple_line_final_df)
Madagascar Covid-19 Totaly olona
Daty
2020-05-20 Marary 371
2020-05-20 Sitrana 131
2020-05-20 Tsaboana 238
2020-05-21 Marary 405
2020-05-21 Sitrana 131
... ... ...
2020-06-28 Sitrana 944
2020-06-28 Tsaboana 1116
2020-06-29 Marary 2138
2020-06-29 Sitrana 966
2020-06-29 Tsaboana 1152
Run Code Online (Sandbox Code Playgroud)
我的目标是显示线图中的最后一个值(图 1):
使用以下代码:
fig ,axes = plt.subplots(ncols=1,nrows=2,constrained_layout=True)
# # ------------------------------Plot first figure --------------------------------------------
palette = ['#F70A0A','#2A930C','#930C85']
sns.set(rc={'figure.figsize':(30,15)},palette= palette, font_scale=1.7)
# # pour les axes
ax1 = sns.lineplot(x=simple_line_final_df.index,y= 'Totaly olona',data=simple_line_final_df,hue='Madagascar Covid-19',style='Madagascar Covid-19',markers=True,dashes=False,ax=axes[0])
# style
sns.set_style("darkgrid" , {"ytick.major.size": 10 …Run Code Online (Sandbox Code Playgroud) 这应该很容易,但我已经尝试了很多东西(基于seaborn relplot:如何控制图例的位置并添加标题,如何向Seaborn Facet Plot添加标题以及文档),但没有任何效果。
我尝试过的事情:
g = sns.relplot(x="col1", y="col2", data=df, height=6, aspect=2);
g.add_legend(title="Col1 x Col2");
Run Code Online (Sandbox Code Playgroud)
还:
g = sns.relplot(x="col1", y="col2", data=df, height=6, aspect=2).set_title('Col1 x Col2')
Run Code Online (Sandbox Code Playgroud)
和:
plt.title('Col1 x Col2')
g = sns.relplot(x="col1", y="col2", data=df, height=6, aspect=2);
Run Code Online (Sandbox Code Playgroud)
好吧,没有任何效果。我希望标题位于图表的顶部,就像 plt.title() 通常所做的那样。
我有以下代码来绘制图形
import pandas as pd
import urllib3
import seaborn as sns
decathlon = pd.read_csv("https://raw.githubusercontent.com/leanhdung1994/Deep-Learning/main/decathlon.txt", sep='\t')
fig = sns.scatterplot(data = decathlon,
x = '100m', y = 'Long.jump',
hue = 'Points', palette = 'viridis')
sns.regplot(data = decathlon,
x = '100m', y = 'Long.jump',
scatter = False)
Run Code Online (Sandbox Code Playgroud)
我阅读了类似问题的答案,他们使用了该选项plt.figure(figsize=(20,10))。我想保持原来的外观(宽度与长度的比例),但将图形的大小增加一定百分比以获得更好的外观。
您能否详细说明一下如何操作?
我忘记在上面的代码中添加一行%config InlineBackend.figure_format = 'svg'。不幸的是,当我在下面添加这一行时,答案不起作用。
我想生成一个具有两个 y 轴的图形:(Count来自直方图)和Density(来自 KDE)。
我想sns.displot在 Seaborn 中使用>= v 0.11。
import seaborn as sns
df = sns.load_dataset('tips')
# graph 1: This should be the Y-Axis on the left side of the figure
sns.displot(df['total_bill'], kind='hist', bins=10)
# graph 2: This should be the Y-axis on the right side of the figure
sns.displot(df['total_bill'], kind='kde')
Run Code Online (Sandbox Code Playgroud)
我编写的代码生成两个单独的图表;我可以只对两个单独的图形使用分面网格,但我想要更简洁,并将两个单独的网格上的两个 y 轴放置到共享相同 x 轴的单个图形中。
seaborn ×10
python ×8
matplotlib ×7
pandas ×3
heatmap ×2
boxplot ×1
datetime ×1
facet-grid ×1
histogram ×1
python-3.x ×1
statistics ×1