如何在seaborn distplot的模式下画一条垂直线
How to draw a vertical line at the mode of the seaborn distplot
我刚刚学会了如何使用 seaborn
Python 模块绘制密度图:
import numpy as np
import torch
from matplotlib import pyplot as plt
from matplotlib.pyplot import (plot, savefig, xlim, figure,
ylim, legend, boxplot, setp,
axes, xlabel, ylabel, xticks,
axvline)
import seaborn as sns
layer1_G1_G2 = [-0.05567627772688866,
-0.06829605251550674,
-0.0721447765827179,
-0.05942181497812271,
-0.061410266906023026,
-0.062010858207941055,
-0.05238522216677666,
-0.057129692286252975,
-0.06323938071727753,
-0.07018601894378662,
-0.05972284823656082,
-0.06124034896492958,
-0.06971242278814316,
-0.06730005890130997]
def make_density(layer_list,color, layer_num):
layer_list_tensor = torch.tensor(layer_list)
# Plot formatting
plt.title('Density Plot of Median Stn. MC-Losses at Layer ' + layer_num)
plt.xlabel('MC-Loss')
plt.ylabel('Density')
plt.xlim(-0.2,0.05)
plt.ylim(0, 85)
min_ylim, max_ylim = plt.ylim()
# Draw the density plot
sns.distplot(layer_list, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color=color)
# plot the density plot
# the resulting density plot is shown below
>>> make_density(layer1_G1_G2, 'green','1')
如何在这个distplot
上画一条密度曲线的模式的垂直线?
谢谢,
我找到了解决方案:
def make_density(layer_list,color, layer_num):
# Plot formatting
plt.title('Density Plot of Median Stn. MC-Losses at Layer ' + layer_num)
plt.xlabel('MC-Loss')
plt.ylabel('Density')
plt.xlim(-0.2,0.05)
plt.ylim(0, 85)
min_ylim, max_ylim = plt.ylim()
# Draw the density plot
sns.distplot(layer_list, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color=color)
dens_list = sns.distplot(layer1_G1_G2, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color='green').get_lines()[0].get_data()[1].tolist()
max_dens_index = dens_list.index(max(dens_list))
mode = sns.distplot(layer1_G1_G2, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color='green').get_lines()[0].get_data()[0].tolist()[max_dens_index]
plt.axvline(mode, color='orange', linestyle='dashed', linewidth=1.5)
plt.text(mode * 0.87, 80, 'mode: {:.2f}'.format(mode))
>>> make_density(layer1_G1_G2, 'green','1')
您可以提取生成曲线的 x 和 y 值并找到最高的模式 y-value。
from matplotlib import pyplot as plt
import seaborn as sns
layer1_G1_G2 = [-0.05567627772688866, -0.06829605251550674, -0.0721447765827179, -0.05942181497812271, -0.061410266906023026, -0.062010858207941055, -0.05238522216677666, -0.057129692286252975, -0.06323938071727753, -0.07018601894378662, -0.05972284823656082, -0.06124034896492958, -0.06971242278814316, -0.06730005890130997]
def make_density(layer_list, color, layer_num):
# Draw the density plot
ax = sns.distplot(layer_list, hist=False, kde=True, kde_kws={'linewidth': 2}, color=color)
x = ax.lines[0].get_xdata()
y = ax.lines[0].get_ydata()
mode_idx = y.argmax()
ax.vlines(x[mode_idx], 0, y[mode_idx], color='crimson', ls=':')
# Plot formatting
ax.set_title('Density Plot of Median Stn. MC-Losses at Layer ' + layer_num)
ax.set_xlabel('MC-Loss')
ax.set_ylabel('Density')
ax.autoscale(axis='x', tight=True)
ax.set_ylim(ymin=0)
make_density(layer1_G1_G2, 'green', '1')
plt.show()
我刚刚学会了如何使用 seaborn
Python 模块绘制密度图:
import numpy as np
import torch
from matplotlib import pyplot as plt
from matplotlib.pyplot import (plot, savefig, xlim, figure,
ylim, legend, boxplot, setp,
axes, xlabel, ylabel, xticks,
axvline)
import seaborn as sns
layer1_G1_G2 = [-0.05567627772688866,
-0.06829605251550674,
-0.0721447765827179,
-0.05942181497812271,
-0.061410266906023026,
-0.062010858207941055,
-0.05238522216677666,
-0.057129692286252975,
-0.06323938071727753,
-0.07018601894378662,
-0.05972284823656082,
-0.06124034896492958,
-0.06971242278814316,
-0.06730005890130997]
def make_density(layer_list,color, layer_num):
layer_list_tensor = torch.tensor(layer_list)
# Plot formatting
plt.title('Density Plot of Median Stn. MC-Losses at Layer ' + layer_num)
plt.xlabel('MC-Loss')
plt.ylabel('Density')
plt.xlim(-0.2,0.05)
plt.ylim(0, 85)
min_ylim, max_ylim = plt.ylim()
# Draw the density plot
sns.distplot(layer_list, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color=color)
# plot the density plot
# the resulting density plot is shown below
>>> make_density(layer1_G1_G2, 'green','1')
如何在这个distplot
上画一条密度曲线的模式的垂直线?
谢谢,
我找到了解决方案:
def make_density(layer_list,color, layer_num):
# Plot formatting
plt.title('Density Plot of Median Stn. MC-Losses at Layer ' + layer_num)
plt.xlabel('MC-Loss')
plt.ylabel('Density')
plt.xlim(-0.2,0.05)
plt.ylim(0, 85)
min_ylim, max_ylim = plt.ylim()
# Draw the density plot
sns.distplot(layer_list, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color=color)
dens_list = sns.distplot(layer1_G1_G2, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color='green').get_lines()[0].get_data()[1].tolist()
max_dens_index = dens_list.index(max(dens_list))
mode = sns.distplot(layer1_G1_G2, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color='green').get_lines()[0].get_data()[0].tolist()[max_dens_index]
plt.axvline(mode, color='orange', linestyle='dashed', linewidth=1.5)
plt.text(mode * 0.87, 80, 'mode: {:.2f}'.format(mode))
>>> make_density(layer1_G1_G2, 'green','1')
您可以提取生成曲线的 x 和 y 值并找到最高的模式 y-value。
from matplotlib import pyplot as plt
import seaborn as sns
layer1_G1_G2 = [-0.05567627772688866, -0.06829605251550674, -0.0721447765827179, -0.05942181497812271, -0.061410266906023026, -0.062010858207941055, -0.05238522216677666, -0.057129692286252975, -0.06323938071727753, -0.07018601894378662, -0.05972284823656082, -0.06124034896492958, -0.06971242278814316, -0.06730005890130997]
def make_density(layer_list, color, layer_num):
# Draw the density plot
ax = sns.distplot(layer_list, hist=False, kde=True, kde_kws={'linewidth': 2}, color=color)
x = ax.lines[0].get_xdata()
y = ax.lines[0].get_ydata()
mode_idx = y.argmax()
ax.vlines(x[mode_idx], 0, y[mode_idx], color='crimson', ls=':')
# Plot formatting
ax.set_title('Density Plot of Median Stn. MC-Losses at Layer ' + layer_num)
ax.set_xlabel('MC-Loss')
ax.set_ylabel('Density')
ax.autoscale(axis='x', tight=True)
ax.set_ylim(ymin=0)
make_density(layer1_G1_G2, 'green', '1')
plt.show()