在 Python matplotlib 中,如何获得折线图或阶梯图中的线以显示基于 y 值的梯度?
示例图(在 Tableau 中制作):
带有根据 x 值改变梯度的线的阶梯图代码,改编自此答案:
fig, ax = plt.subplots(figsize=(10, 4))
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
y = [2, 3, 9, 10, 2, 9, 0, 1, 9, 1, -8]
T = np.linspace(0,1,np.size(x))**2
s = 1
for i in range(0, len(x)-s, s):
ax.step(x[i:i+s+1], y[i:i+s+1], marker='.', color=(0.0,0.5,T[i]))
ax.tick_params(axis='both', colors='lightgray', labelsize=8)
Run Code Online (Sandbox Code Playgroud)
Dataframe
df
Sample Type y1 y2 y3 y4
S1 H 1000 135 220 171
S2 H 2900 1560 890 194
S3 P 678 350 127 255
S4 P 179 510 154 275
Run Code Online (Sandbox Code Playgroud)
I want to plot y1, y2, y3, y4 vs Sample scatterplot with hue as Type.
Is there any way to do it in Seaborn?
我正在尝试绘制散点图,其中每个点都根据变量进行着色Points。此外,我想添加回归线。
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')
g = sns.lmplot(
data = decathlon,
x="100m", y="Long.jump",
hue = 'Points', palette = 'viridis'
)
Run Code Online (Sandbox Code Playgroud)
在我看来,有两条回归线,每组数据各一条。这不是我想要的。我想要整个数据的回归线。此外,如何隐藏右侧的图例?
您能否详细说明一下如何操作?
我想在 FacetGrid 中的每个线图中挑选出某一行,以突出显示与其他选项相比的“默认”设置。
我尝试根据seaborn文档中的随机游走示例制作一个最小的示例
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
rs = np.random.RandomState(2020)
pos = rs.randint(-1, 2, (20, 5)).cumsum(axis=1)
pos -= pos[:, 0, np.newaxis]
step = np.tile(range(5), 20)
walk = np.repeat(range(20), 5)
df = pd.DataFrame(np.c_[pos.flat, step, walk],
columns=["position", "step", "walk"])
df["family"] = df["walk"] % 5
df["top"] = df.groupby("walk")["position"].transform("max")
df["importance"] = df["top"]+1
grid = sns.FacetGrid(df, col="family", col_wrap=3, hue="walk")
grid.map_dataframe(sns.lineplot, "step", "position", marker="o")
grid.add_legend()
Run Code Online (Sandbox Code Playgroud)
这给了我多面线图,所有线的宽度相同(当然):
我创建了一个额外的列,名为importance; 我想根据此列设置线宽。我可以看到,通过一个简单的操作,seaborn.lineplot您可以“分配 …
我有一个热图,我想删除颜色条上的标签和刻度线。如何使用迄今为止制作的热图(下面的代码)来做到这一点?
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(my_heatmap, cmap='RdYlGn', vmin=0, vmax=1)
plt.rcParams["figure.figsize"] = (8, 6)
plt.title('10 mm Precipitation Probabilities\nTopeka, Kansas', fontsize = 16)
plt.xlabel('X', fontsize = 14)
plt.ylabel('Y', fontsize = 14)
plt.text(6.7,.18, 'High Probability')
plt.show()
Run Code Online (Sandbox Code Playgroud)
(我宁愿它只是在栏顶部显示高概率,如我制作的标签所示)。
我试图将 Seaborn 基于时间的热图放置在条形图的顶部,指示每个箱/时间范围内的患者数量。我可以成功制作单独的热图和条形图,但将两者结合起来却无法按预期工作。
import pandas as pd
import numpy as np
import seaborn as sb
from matplotlib import pyplot as plt
# Mock data
patient_counts = [650, 28, 8]
missings_df = pd.DataFrame(np.array([[-15.8, 600/650, 580/650, 590/650],
[488.2, 20/23, 21/23, 21/23],
[992.2, 7/8, 8/8, 8/8]]),
columns=['time', 'Resp. (/min)', 'SpO2', 'Blood Pressure'])
missings_df.set_index('time', inplace=True)
# Plot heatmap
fig, (ax1, ax2) = plt.subplots(nrows=2, figsize=(26, 16), sharex=True, gridspec_kw={'height_ratios': [5, 1]})
sb.heatmap(missings_df.T, cmap="Blues", cbar_kws={"shrink": .8}, ax=ax1, xticklabels=False)
plt.xlabel('Time (hours)')
# Plot line graph under heatmap to …Run Code Online (Sandbox Code Playgroud) 我正在尝试将条形图和折线图绘制为单个图,并且seaborn由于其良好的格式功能而倾向于使用。但是,当我df1.plot(kind='bar',...)执行后df1.plot(kind='line',..., secondary_y=True),我得到如下类似的结果,即没有折线图,但没有错误。
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Sample dataframe.
df1 = pd.DataFrame({'date':pd.date_range(datetime(2020,1,1), periods=699).tolist(), 'amount':range(1,700), 'balance':np.cumsum(range(1,700))})
df1.loc[:, 'month'] = df1['date'].dt.to_period("M")
df1.loc[:, 'month_str'] = df1['date'].dt.year.astype(str) + '-' + df1['date'].dt.month.astype(str)
df1.loc[:, 'month_dt'] = pd.to_datetime(df1.month.dt.year*10000+df1.month.dt.month*100+1,format='%Y%m%d')
# Case-1: This doesn't work.
df2 = df1.groupby(['month']).agg({'amount':'sum','balance':'sum'})
sns.barplot(x='month', y='amount', data=df2.reset_index(), palette="Blues_d")
ax2 = plt.twinx()
sns.lineplot(x='month', y='balance', data=df2.reset_index(), color='red', markers=True, ax=ax2)
# Case-2: This doesn't work (as intended, if months grow …Run Code Online (Sandbox Code Playgroud) 我使用以下代码创建了雨云图:
#雨图
dx = 'Time Point'; dy = 'Score'; ort = "v"; pal = "Set2"; sigma = .2;
f, ax = plt.subplots(figsize=(7, 5))
pt.RainCloud(x = dx, y = dy, data = df, palette = pal, bw = sigma,
width_viol = .9, ax= ax, orient = ort, move = .2)
plt.title("")
plt.ylabel('Score', fontsize = 20)
plt.xlabel('', fontsize = 20)
plt.grid(color = 'w')
if savefigs:
plt.savefig('/Users/zeidanlab/Desktop/gv/rainplots/figure_tsc.png', bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法使箱线图与分布斑点重叠。
我正在使用plotly 制作 OHLC 图。我偶然发现了一个问题。x 轴上的标签看起来非常混乱。有没有办法让它更整洁。或者我们可以只显示极端日期值吗?例如,仅显示第一个日期值和最后一个日期值。日期范围本质上是动态的。我正在使用下面的查询来制作图表。谢谢您的帮助。
fig = go.Figure(data=go.Candlestick(x=tickerDf.index.date,
open=tickerDf.Open,
high=tickerDf.High,
low=tickerDf.Low,
close=tickerDf.Close) )
fig.update_xaxes(showticklabels=True ) #Disable xticks
fig.update_layout(width=800,height=600,xaxis=dict(type = "category") ) # hide dates with no values
st.plotly_chart(fig)
Run Code Online (Sandbox Code Playgroud)
这里的tickerDf是包含股票相关数据的数据框。
我有 DataFrame df:
Run Code Online (Sandbox Code Playgroud)Timestamp-start datetime64[ns] Timestamp-end datetime64[ns] M object S object Type object description_x object description_y object Date datetime64[ns] number_col float64 dtype: object
number_col :
51 0.0
0 1.0
1 2.0
2 3.0
52 5.0
...
47 148.0
48 148.0
43 148.0
49 149.0
50 149.0
Name: number_col, Length: 132, dtype: float64
Run Code Online (Sandbox Code Playgroud)
我想使用seaborn和列number_col绘制直方图
> import seaborn as sns
>
> sns.distplot(df, x='number_col')
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
ValueError: could not convert string to float: 'number_col'
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会发生这种情况,“number_col”已经是一个浮点列。
seaborn ×10
python ×8
matplotlib ×5
pandas ×3
python-3.x ×3
boxplot ×1
charts ×1
heatmap ×1
ohlc ×1
plotly ×1
relplot ×1
scatter-plot ×1
subplot ×1
violin-plot ×1