使用 Seaborn 散点图,如何将标记设置为空心圆而不是实心圆?
这是一个简单的例子:
import pandas as pd
import seaborn as sns
df = pd.DataFrame(
{'x': [3,2,5,1,1,0],
'y': [1,1,2,3,0,2],
'cat': ['a','a','a','b','b','b']}
)
sns.scatterplot(data=df, x='x', y='y', hue='cat')
Run Code Online (Sandbox Code Playgroud)
我尝试过以下方法但没有成功;其中大多数不会抛出错误,而是产生与上面相同的图。我认为这些不起作用,因为颜色是用hue
参数设置的,但我不确定修复是什么。
sns.scatterplot(data=df, x='x', y='y', hue='cat', facecolors = 'none')
sns.scatterplot(data=df, x='x', y='y', hue='cat', facecolors = None)
sns.scatterplot(data=df, x='x', y='y', hue='cat', markerfacecolor = 'none')
sns.scatterplot(data=df, x='x', y='y', hue='cat', markerfacecolor = None)
with sns.plotting_context(rc={"markerfacecolor": None}):
sns.scatterplot(data=df, x='x', y='y', hue='cat')
Run Code Online (Sandbox Code Playgroud) 我有一个 Seaborn 散点图,并试图用“hue_order”控制绘图顺序,但它没有像我预期的那样工作(我无法让蓝点显示在灰色之上)。
x = [1, 2, 3, 1, 2, 3]
cat = ['N','Y','N','N','N']
test = pd.DataFrame(list(zip(x,cat)),
columns =['x','cat']
)
display(test)
colors = {'N': 'gray', 'Y': 'blue'}
sns.scatterplot(data=test, x='x', y='x',
hue='cat', hue_order=['Y', 'N', ],
palette=colors,
)
Run Code Online (Sandbox Code Playgroud)
翻转“hue_order”hue_order=['N', 'Y', ]
不会改变绘图。如何让“Y”类别绘制在“N”类别之上?我的实际数据具有重复的 x,y 坐标,这些坐标由类别列区分。
有没有办法关闭 Seaborn Jointplot 中的顶部边缘图?
tips = sns.load_dataset('tips')
g = sns.jointplot(
data=tips,
x="total_bill",
y="tip",
hue="smoker",
)
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 R 中读取 CSV 文件。如何在阅读时阅读和格式化日期和时间并避免丢失标记为 ? 的值。我读取后加载的数据应该是干净的。
我尝试过类似的方法
data <- read.csv("Data.txt")
它有效,但日期和时间保持原样。
另外,如何从特定数据范围中提取数据子集?
为此,我尝试了类似的东西
subdata <- subset(data,
Date== 01/02/2007 & Date==02/02/2007,
select = Date:Sub_metering_3)
Run Code Online (Sandbox Code Playgroud)
我得到错误 Error in eval(expr, envir, enclos) : object 'Date' not found
日期是第一列。
在 Seaborn FacetGrid 中,如何让 y 轴刻度标签显示在所有子图中,无论是否显示sharey=True
?
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", row="sex")
g.map(sns.scatterplot, "total_bill", "tip")
Run Code Online (Sandbox Code Playgroud)
以下尝试返回错误AttributeError: 'FacetGrid' object has no attribute 'flatten'
for axis in g.flatten():
for tick in axis.get_yticklabels():
tick.set_visible(True)
Run Code Online (Sandbox Code Playgroud) 有没有办法创建一个 Seaborn 线图,所有线均为灰色,平均值为红线?我正在尝试执行此操作,relplot
但我不知道如何将平均值与数据分开(并且似乎未绘制平均值?)。
制作可重复的数据框
np.random.seed(1)
n1 = 100
n2 = 10
idx = np.arange(0,n1*2)
x, y, cat, id2 = [], [], [], []
x1 = list(np.random.uniform(-10,10,n2))
for i in idx:
x.extend(x1)
y.extend(list(np.random.normal(loc=0, scale=0.5, size=n2)))
cat.extend(['A', 'B'][i > n1])
id2.append(idx[i])
id2 = id2 * n2
id2.sort()
df1 = pd.DataFrame(list(zip(id2, x, y, cat)),
columns =['id2', 'x', 'y', 'cat']
)
Run Code Online (Sandbox Code Playgroud)
绘图尝试
g = sns.relplot(
data=df1, x='x', y='y', hue='id2',
col='cat', kind='line',
palette='Greys',
facet_kws=dict(sharey=False,
sharex=False
),
legend=False
)
Run Code Online (Sandbox Code Playgroud)
我正在将两个 Pandas DataFrame 合并在一起,并获得“_x”和“_y”后缀。易于复制下面的示例。我尝试添加, suffixes=(False, False)
到合并中,但它返回一个错误:ValueError: columns overlap but no suffix specified: Index(['f1', 'f2', 'f3'], dtype='object')
。我一定在这里遗漏了一些明显的东西?我明白为什么使用 join 会发生这种情况,但我没想到它会用于合并。
请忽略复制切片错误。我想不通为什么它不扔在10号线这个错误,但它扔在第17行(如果你知道,有一个悬而未决的问题在这里就可以了!)
系统详细信息:Windows 10
conda 4.8.2
Python 3.8.3
pandas 1.0.5 py38he6e81aa_0 conda-forge
import pandas as pd
#### Build an example DataFrame for easy-to-replicate example ####
myid = [1, 1, 1, 2, 2]
myorder = [3, 2, 1, 2, 1]
y = [3642, 3640, 3632, 3628, 3608]
x = [11811, 11812, 11807, 11795, 11795]
df = pd.DataFrame(list(zip(myid, myorder, …
Run Code Online (Sandbox Code Playgroud) 有没有办法将平均值和中位数添加到 Seaborn's displot
?
penguins = sns.load_dataset("penguins")
g = sns.displot(
data=penguins, x='body_mass_g',
col='species',
facet_kws=dict(sharey=False, sharex=False)
)
Run Code Online (Sandbox Code Playgroud)
基于向 seaborn FacetGrid distplots 添加均值和可变性,我看到我可以定义一个FacetGrid
并映射一个函数。我可以将自定义函数传递给displot
吗?
尝试displot
直接使用的原因是这些图开箱即用更漂亮,无需调整刻度标签大小、轴标签大小等,并且在视觉上与我制作的其他图保持一致。
def specs(x, **kwargs):
ax = sns.histplot(x=x)
ax.axvline(x.mean(), color='k', lw=2)
ax.axvline(x.median(), color='k', ls='--', lw=2)
g = sns.FacetGrid(data=penguins, col='species')
g.map(specs,'body_mass_g' )
Run Code Online (Sandbox Code Playgroud)
当我尝试在 Jupyter Notebook 中将图表保存为 PNG 时,使用 Altair saver 时不断出现错误。ValueError: Unsupported format: 'png'
我从这里知道我需要设置渲染器启用,从这里知道自述文件中有一个拼写错误,所以我在第五行代码中得到了正确的结果。
运行以下命令:
Windows 10
conda 4.8.2
Python 3.8.3
altair 4.1.0 py_1 conda-forge
altair_saver 0.1.0 py_0 conda-forge
vega 3.4.0 py38h32f6830_0 conda-forge
selenium 3.141.0 py38h9de7a3e_1001 conda-forge
import pandas as pd
import altair as alt
from altair_saver import save
alt.renderers.enable('default'); # if in jupyter, ; to suppress output
alt.renderers.enable('altair_saver', fmts=['vega-lite', 'png']);
mytaskbars = pd.DataFrame([
{"task": "Task1a", "start": '2020-06-01', "end": '2020-09-30', "color": 'royalblue'},
{"task": "Task1b", "start": '2020-06-01', …
Run Code Online (Sandbox Code Playgroud) 使用 Matplotlib 制作散点图(不是 Seaborn、Pandas 或其他高级接口),如何使用字典来指定标记类型?
此示例使用颜色字典:
x = [4, 8, 1, 0, 2]
y = [0.1, 1, 0.4, 0.8, 0.9]
name = ["A", "A", "B", "A", "B"]
df = pd.DataFrame(data=zip(x, y, name), columns=["x", "y", "name"])
colors = {"A": "red", "B": "blue"}
fig, ax = plt.subplots(1, 1)
ax.scatter(
x=df["x"],
y=df["y"],
facecolors="none",
edgecolors=df["name"].map(colors),
)
Run Code Online (Sandbox Code Playgroud)
但以下会引发错误TypeError: 'Series' objects are mutable, thus they cannot be hashed
:
markers = {"A": "v", "B": "D"}
fig, ax = plt.subplots(1, 1)
ax.scatter(
x=df["x"],
y=df["y"],
facecolors="none",
edgecolors=df["name"].map(colors), …
Run Code Online (Sandbox Code Playgroud) 我在我的 venv 中安装conda install -c conda-forge jupyter_nbextensions_configurator
并运行jupyter nbextensions_configurator enable --user
,但 nbextensions 菜单是空的。我已经重新启动笔记本几次,没有运气。如何让菜单显示出来,以便我可以单击并选择 TOC 等?
系统详情:
Windows 10, Firefox
conda 4.8.2
Python 3.8.3
jupyter 1.0.0 pypi_0 pypi
jupyter_client 6.1.3 py_0 conda-
forge jupyter_console 6.1.0 py_1 conda-
forge jupyter_contrib_core 0.1 conda-
forge jupyter_contrib.388304py3882036py3882036py382036py382036py282036206
jupyter_nbextensions_configurator 0.4.1 py38_0 conda-forge
(myenv) C:\path>jupyter nbextension list
Known nbextensions:
config dir: C:\path\.jupyter\nbconfig
notebook section
nbextensions_configurator/config_menu/main enabled
- Validating: problems found:
- require? X nbextensions_configurator/config_menu/main
jupyter-js-widgets/extension disabled
jupyter-vega/index disabled
tree section
nbextensions_configurator/tree_tab/main enabled
- Validating: …
Run Code Online (Sandbox Code Playgroud) 使用 Seaborn Facet Grids,如何仅更改边距标题的颜色?请注意,这g.set_titles(color = 'red')
会更改两个标题。
p = sns.load_dataset('penguins')
sns.displot(data=p, x='flipper_length_mm',
col='species', row='sex',
facet_kws=dict(margin_titles=True)
)
Run Code Online (Sandbox Code Playgroud)
如何为子图中的所有直方图添加全局图例?
下面的代码模仿了一些数据,我希望在图中的某处有一个全局图例。我正在底部思考,但会考虑更好的答案。它可以左对齐、居中或分散。
我如何添加全球图例?我尝试按照此处的fig.legend((v1, v2, v3), ('v1', 'v2', 'v3'), 'lower left')
建议使用,但我认为这不适用于直方图。
使用Python 3.8
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
%matplotlib inline
v1=[3,1.1,2,5.2,4.9,2.6,3,0.5]
v2=[6.1,5.2,9.5,4.5]
v3=[0.1,1.4,0.5,1.2]
fig, axes = plt.subplots(4,2, figsize=(6.5,4.0), constrained_layout=True)
fig.suptitle('suptile')
mybins = [0,3,6,9,12]
mylist = [0,1,4,7]
for ii, ax in enumerate(axes.flat):
if ii in mylist:
data = [v1,v2,v3]
colors = ['blue', 'red', 'green']
labels = ['v1', 'v2', 'v3']
else:
data = [v1,v2]
colors = ['blue', 'red']
labels = ['v1', 'v2']
ax.hist(data, color=colors,edgecolor='black', alpha=0.5,
density=False, cumulative=False, …
Run Code Online (Sandbox Code Playgroud) python ×8
seaborn ×7
matplotlib ×4
facet-grid ×3
scatter ×2
altair ×1
histogram ×1
jupyter-contrib-nbextensions ×1
legend ×1
merge ×1
pandas ×1
python-3.x ×1
r ×1
relplot ×1
save ×1
scatter-plot ×1
subplot ×1