一张图中的点图和散点图,但 X 轴正在移动
Pointplot and Scatterplot in one figure but X axis is shifting
您好,我正在尝试在具有相同数据集的一张图上绘制点图和散点图,这样我就可以看到构成点图的各个点。
这是我使用的代码:
xlPath = r'path to data here'
df = pd.concat(pd.read_excel(xlPath, sheet_name=None),ignore_index=True)
sns.pointplot(data=df, x='ID', y='HM (N/mm2)', palette='bright', capsize=0.15, alpha=0.5, ci=95, join=True, hue='Layer')
sns.scatterplot(data=df, x='ID', y='HM (N/mm2)')
plt.show()
当我绘制时,出于某种原因,散点图中的点在 x 轴上偏移了一个 ID 点。当我分别绘制散点图或点图时,它们都位于正确的 ID 点。为什么将它们绘制在同一个图上会导致散点图向右偏移一个?
编辑:试图使 ID 列分类,但这也不起作用。
Seaborn 的 pointplot
创建一个分类 x 轴,而这里 scatterplot
使用数字 x 轴。
明确地使 x 值分类:df['ID'] = pd.Categorical(df['ID'])
是不够的,因为散点图仍然可以看到数字。将值更改为字符串就可以了。要以正确的顺序排列它们,可能需要进行排序。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
# first create some test data
df = pd.DataFrame({'ID': np.random.choice(np.arange(1, 49), 500),
'HM (N/mm2)': np.random.uniform(1, 10, 500)})
df['Layer'] = ((df['ID'] - 1) // 6) % 4 + 1
df['HM (N/mm2)'] += df['Layer'] * 8
df['Layer'] = df['Layer'].map(lambda s: f'Layer {s}')
# sort the values and convert the 'ID's to strings
df = df.sort_values('ID')
df['ID'] = df['ID'].astype(str)
fig, ax = plt.subplots(figsize=(12, 4))
sns.pointplot(data=df, x='ID', y='HM (N/mm2)', palette='bright',
capsize=0.15, alpha=0.5, ci=95, join=True, hue='Layer', ax=ax)
sns.scatterplot(data=df, x='ID', y='HM (N/mm2)', color='purple', ax=ax)
ax.margins(x=0.02)
plt.tight_layout()
plt.show()
您好,我正在尝试在具有相同数据集的一张图上绘制点图和散点图,这样我就可以看到构成点图的各个点。
这是我使用的代码:
xlPath = r'path to data here'
df = pd.concat(pd.read_excel(xlPath, sheet_name=None),ignore_index=True)
sns.pointplot(data=df, x='ID', y='HM (N/mm2)', palette='bright', capsize=0.15, alpha=0.5, ci=95, join=True, hue='Layer')
sns.scatterplot(data=df, x='ID', y='HM (N/mm2)')
plt.show()
当我绘制时,出于某种原因,散点图中的点在 x 轴上偏移了一个 ID 点。当我分别绘制散点图或点图时,它们都位于正确的 ID 点。为什么将它们绘制在同一个图上会导致散点图向右偏移一个?
编辑:试图使 ID 列分类,但这也不起作用。
Seaborn 的 pointplot
创建一个分类 x 轴,而这里 scatterplot
使用数字 x 轴。
明确地使 x 值分类:df['ID'] = pd.Categorical(df['ID'])
是不够的,因为散点图仍然可以看到数字。将值更改为字符串就可以了。要以正确的顺序排列它们,可能需要进行排序。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
# first create some test data
df = pd.DataFrame({'ID': np.random.choice(np.arange(1, 49), 500),
'HM (N/mm2)': np.random.uniform(1, 10, 500)})
df['Layer'] = ((df['ID'] - 1) // 6) % 4 + 1
df['HM (N/mm2)'] += df['Layer'] * 8
df['Layer'] = df['Layer'].map(lambda s: f'Layer {s}')
# sort the values and convert the 'ID's to strings
df = df.sort_values('ID')
df['ID'] = df['ID'].astype(str)
fig, ax = plt.subplots(figsize=(12, 4))
sns.pointplot(data=df, x='ID', y='HM (N/mm2)', palette='bright',
capsize=0.15, alpha=0.5, ci=95, join=True, hue='Layer', ax=ax)
sns.scatterplot(data=df, x='ID', y='HM (N/mm2)', color='purple', ax=ax)
ax.margins(x=0.02)
plt.tight_layout()
plt.show()