- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在数据框中的 (x, y) 坐标提供的 NHL 溜冰场的背景图像上绘制 NHL 投篮及其分布(通过 Seaborn kdeplot)。我的代码生成的绘图 99% 达到了我想要的位置,但我不是 100% 确定如何剪切镜头贴图的边缘,使其不会超出加载图像的边界.
import os
import random
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from PIL import Image, ImageDraw, ImageFont
random_events = ('SHOT', 'MISSED_SHOT', 'GOAL')
random_team = ('Preferred', 'Other')
events = list()
for i in range(30):
event = dict()
event['event_type'] = random.choice(random_events)
event['team'] = random.choice(random_team)
event['coords_x'] = round(random.uniform(-100, 100), 2)
event['coords_y'] = round(random.uniform(-42.5, 42.5), 2)
events.append(event)
df = pd.DataFrame(events)
pref_df = df.loc[df['team'] == 'Preferred']
other_df = df.loc[df['team'] == 'Other']
# Fix Coordinates
pref_df.loc[pref_df['coords_x'] < 0, ['coords_x', 'coords_y']] *= -1
other_df.loc[other_df['coords_x'] > 0, ['coords_x', 'coords_y']] *= -1
print(pref_df)
print(other_df)
MY_DPI = 96
IMG_WIDTH = 1024
IMG_HEIGHT = 440
fig = plt.figure(figsize=(IMG_WIDTH / MY_DPI, IMG_HEIGHT / MY_DPI), dpi=MY_DPI)
ax = fig.add_subplot(111, frameon=False, xticks=[], yticks=[])
ax_extent = [-100, 100, -42.5, 42.5]
img = Image.open('Rink-Shotmap-Blank.png')
plt.imshow(img, extent=ax_extent)
# Draw the seaborn portion of the graph
sns.set_style("white")
sns.kdeplot(pref_df.coords_x, pref_df.coords_y, cmap='Reds', shade=True, shade_lowest=False, alpha=0.6)
sns.kdeplot(other_df.coords_x, other_df.coords_y, cmap="Blues", shade=True, shade_lowest=False, alpha=0.6)
# Hide all axes & bounding boxes
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
ax.set_frame_on(False)
ax.axis('off')
plt.show()
有没有办法将 kdeplot 剪切到 background image 的边界上(通过 ax.imshow 加载)?我尝试创建一个 Path
对象,它是一个范围大小的矩形,但没有成功。
如果对生成此代码的方式有任何其他建议,我将不胜感激,因为这些新的可视化库对我来说相对较新。
谢谢
最佳答案
如果能包含 Minimal, Complete, and Verifiable example 就更好了以便人们可以按照您提供的代码进行操作。但无论如何,使用 sns.kdeplot() 中的示例代码并使用 matplotlib 演示:Clipping images with patches ,使用任意 Patch
kdeplot
创建的
PathCollection
对象是相当简单的
iris = sns.load_dataset("iris")
setosa = iris.loc[iris.species == "setosa"]
virginica = iris.loc[iris.species == "virginica"]
ax = sns.kdeplot(setosa.sepal_width, setosa.sepal_length,
cmap="Reds", shade=True, shade_lowest=False)
ax = sns.kdeplot(virginica.sepal_width, virginica.sepal_length,
cmap="Blues", shade=True, shade_lowest=False)
# create a Patch object, here in data coordinates to clip the KDE plots
p = matplotlib.patches.Rectangle(xy=[2.5,5], width=2, height=3, transform=ax.transData, facecolor="xkcd:greenish", alpha=0.3, zorder=-1)
for col in ax.collections:
col.set_clip_path(p)
# simply for demonstration, show the patch on the axes (optional)
ax.add_patch(p)
关于python - 在 PyPlot 背景图像的范围内剪辑 Seaborn Kdeplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53131151/
我想用 seaborn.kdeplot 创建核密度估计侧面有一个颜色条。 import matplotlib.pyplot as plt import seaborn as sns import nu
我喜欢 multiple bivariate KDE plots 的 Seaborn 示例,但我希望在该示例中使用标准的 matplotlib 图例而不是自定义标签。 这是我尝试使用图例的示例: im
我正在尝试在 map (Shapefile) 上绘制 Seaborn 内核密度。 为了生成内核密度,我在 Seaborn Website 中使用了以下代码 x, y = np.random.multi
我正在尝试在我的 kdeplot 中自定义我的阴影颜色。 我想使用这个调色板,从浅绿色到#3bd6b0颜色至少有 15 个级别(但以后可能会更多)。为了做到这一点,我使用了 sns.light_pal
我有一个包含 ~900 行的数据框;我正在尝试为某些列绘制 KDEplots。在某些列中,大多数值是相同的最小值。当我包含太多最小值时,KDEPlot 会突然停止显示最小值。例如,以下包括 600 个
我正在尝试获取 Seaborn kdeplot处理我的数据集的示例。由于某种原因,我的一个数据集根本没有绘制,但另一个似乎绘制得很好。为了获得最小的工作示例,我仅从非常大的数据集中采样了 10 行。
我正在使用 kdeplot像这样绘制两个双变量分布的密度,其中 df_c 和 df_n 是两个 Pandas DataFrame: f, ax = plt.subplots(figsize=(6, 6
我正在使用 seaborn 创建一个边缘分布的 kdeplot,如 this answer 中所述。 .我稍微调整了代码,得到了这个: import matplotlib.pyplot as plt
我想从 jupyter notebook 中的文档执行以下示例:https://seaborn.pydata.org/generated/seaborn.kdeplot.html tips = sns
seaborn.kdeplot 的每个 hue 组如何? , 或 seaborn.displot与 kind='kde' 被赋予不同的 linestyle? 轴级和图形级选项都将接受 linestyl
我写了一个类来绘制一些数据点。我使用 seaborn 制作了 kernel density 图,它导致 (1) 框架消失了,我想要一个刚性框架,并且 (2) 图中有网格与 (3) 我想摆脱它们的背景颜
我是 seaborn 的新手,如果这是一个简单的问题,我深表歉意,但我无法在文档中的任何地方找到关于如何在 kdeplot 中控制 n_levels 绘制的级别的描述。这是一个例子: import s
我希望能够在 y 轴边距上绘制多个重叠的 kde 图(不需要 x 轴边距图)。每个 kde 图都对应于颜色类别(有 4 个),因此我将有 4 个 kde,每个描绘其中一个类别的分布。据我所知: imp
这是我的代码 import numpy as np from numpy.random import randn import pandas as pd from scipy import stats
是否可以在绘图之前从 sns.kdeplot() 中提取数据?IE。不使用功能y.get_lines()[0].get_data() 绘图后 最佳答案 这可以通过从 matplotlib Axes 对
下面的 kdeplot 在左边有一个峰值,我想更关注它: a = np.array([1] * 100 + [5]) sns.kdeplot(a) 我通常这样做的方法是 pyplot.xlim调用,但
我想在数据框中的 (x, y) 坐标提供的 NHL 溜冰场的背景图像上绘制 NHL 投篮及其分布(通过 Seaborn kdeplot)。我的代码生成的绘图 99% 达到了我想要的位置,但我不是 10
下面的线列表表示一组线(比方说,对于某些化学光谱),以 MHz 为单位。我知道用于探测这些线的激光线宽为 5 MHz。因此,天真地,这些带宽为 5 的线的核密度估计应该给我在使用上述激光的实验中产生的
我正在尝试绘制与 seaborn 文档中描述的情况非常相似的情况 http://seaborn.pydata.org/tutorial/axis_grids.html#plotting-pairwis
我正在尝试使用 Seaborn 的 kdeplot 制作一个漂亮的自由能表面(热图)。 我非常接近,但无法想出改变颜色条比例的方法。颜色条标尺很重要,因为它应该代表 map 上不同坐标处的能量差异。我
我是一名优秀的程序员,十分优秀!