gpt4 book ai didi

python - 如何绘制 seaborn ridge plot

转载 作者:行者123 更新时间:2023-12-02 02:38:53 26 4
gpt4 key购买 nike

使用 seaborn 0.11,我想绘制一个 seaborn ridge plot

我想在单个图中绘制磁谱数据。所以 y 轴只计算地 block 的数量,x 轴使用 enter image description here数据。这是我所期望的示例。

这些是不同角度的光谱数据。有什么方法可以在 python 中绘制这样的东西吗?提前致谢。

import matplotlib.pyplot as plt

data = np.loadtxt("0_deg.txt", skiprows=0, dtype=np.float128)
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(data, markersize=1, label="0° ")

数据是这样的

Data

269.09019   0.10781
269.09208 0.10908
269.09397 0.11928
269.09587 0.11800
269.09776 0.11418
269.09966 0.11545
269.10155 0.11928
269.10344 0.11673
269.10534 0.10781
269.10723 0.10526
269.10913 0.11418
269.11102 0.11418
269.11292 0.11291
269.11481 0.11928
269.11670 0.11928
269.11860 0.12055
269.12049 0.11928
269.12239 0.11928
269.12428 0.11673
269.12618 0.11545
269.12807 0.11545
269.12996 0.11036
269.13186 0.10908
269.13375 0.10144
269.13565 0.10908
269.13754 0.10654
269.13943 0.10399
269.14133 0.10526
269.14322 0.11418
269.14512 0.10908
269.14701 0.10272
269.14891 0.09889
269.15080 0.10526
269.15269 0.09889
269.15459 0.09635
269.15648 0.09889
269.15838 0.10017
269.16027 0.09507
269.16217 0.08998
269.16406 0.09507
269.16595 0.08870
269.16785 0.09252
269.16974 0.09762
269.17164 0.09889
269.17353 0.09507
269.17542 0.10017
269.17732 0.10399
269.17921 0.10144
269.18111 0.09762
269.18300 0.10144
269.18490 0.10144
269.18679 0.09635
269.18868 0.10017
269.19058 0.10399
269.19247 0.10017
269.19437 0.10017
269.19626 0.09889
269.19816 0.10017
269.20005 0.09507
269.20194 0.09635
269.20384 0.09380
269.20573 0.09252
269.20763 0.08998

enter image description here

最佳答案

Ridge Plot

  • 使用pathlib使用.glob 查找目录中的所有文件
  • 将文件加载到 pandas.DataFrameslist
    • 文件名用下划线分隔,并使用索引 -1 处的值作为每组数据的 'label' 列值。此值为 0deg10deg 等。
      • 每个文件的标签必须是唯一的,因为绘图行由标签决定。
    • 给定 f = WindowsPath('data/CuSo4_10mV_300mS_Amod9.44V_0deg') 作为 pathlib 对象
      • f.suffix'.44V_0deg'
      • f.suffix.split('_')[-1]'0deg'
    • 添加了一个'label' 列,以便可以为每条绘图线识别正确的'intensity' 值。
  • 使用 pandas.concat 组合数据帧列表。
  • ridge plot 的 DataFrame 必须采用长(整齐)格式
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme(style="white", rc={"axes.facecolor": (0, 0, 0, 0)})

# find the local files
p = Path('c:/somepathtofiles') # p = Path.cwd() # for data in the current working directory
files = list(p.glob('*.44V*'))

# load all the data, but create a dataframe in the correct form for a RidgePlot
dfl = list()
for f in files:
v = pd.read_csv(f, sep='\\s+', header=None, usecols=[1])
v.columns = ['intensity']
v['label'] = f.suffix.split('_')[-1]
dfl.append(v)

# combine the list of dataframes into a single dataframe
df = pd.concat(dfl)

# plot
# Initialize the FacetGrid object
pal = sns.cubehelix_palette(len(df.label.unique()), rot=-.25, light=.7)
g = sns.FacetGrid(df, row="label", hue="label", aspect=15, height=.5, palette=pal)

# Draw the densities in a few steps
g.map(sns.kdeplot, "intensity", bw_adjust=.5, clip_on=False, fill=True, alpha=1, linewidth=1.5)
g.map(sns.kdeplot, "intensity", clip_on=False, color="w", lw=2, bw_adjust=.5)
g.map(plt.axhline, y=0, lw=2, clip_on=False)

# Define and use a simple function to label the plot in axes coordinates
def label(x, color, label):
ax = plt.gca()
ax.text(0, .2, label, fontweight="bold", color=color, ha="left", va="center", transform=ax.transAxes)

g.map(label, "intensity")

# Set the subplots to overlap
g.fig.subplots_adjust(hspace=-.25)

# Remove axes details that don't play well with overlap
g.set_titles("")
g.set(yticks=[])
g.despine(bottom=True, left=True)

# uncomment the following line if there's a tight layout warning
# g.fig.tight_layout()

enter image description here

更新前

import pandas as pd
import matplotlib.pyplot as plt
from pathlib import Path

###########################################################
# Use if loading the data from the local computer

# create the path to the files
p = Path('c:/somepathtofiles')

# if loading the data from the local computer
# get a generator of all the files
files = p.glob('*.44V*')

# load the files into a dict of pandas.DataFrames
dfd = {f'{file.suffix.split("_")[-1]}': pd.read_csv(file, sep='\\s+', header=None) for file in files}

###########################################################
# Use if loading data from GitHub

# don't use both lines for files.
files = [f'https://raw.githubusercontent.com/mahesh27dx/NPR/master/CuSo4_10mV_300mS_Amod9.44V_{v}deg' for v in range(0, 190, 10)]

# load the files into a dict of pandas.DataFrames
dfd = {f'{file.split("_")[-1]}': pd.read_csv(file, sep='\\s+', header=None) for file in files}

###########################################################

# iterate through the dict
plt.figure(figsize=(10, 8)) # set up plot figure
for k, v in dfd.items():
dfd[k].columns = ['mag_field', 'intensity']

sns.lineplot(x='mag_field', y='intensity', data=v, label=k)

plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.xlabel('Magnetic Field')
plt.ylabel('Field Intensity')
plt.show()

enter image description here

关于python - 如何绘制 seaborn ridge plot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63927245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com