(使用Python 3.0),我想以0.25为增量在指定范围内计算和绘制给定数据的PDF,以便于可视化。
由于使用了SO社区,因此已经完成了计算单个图的工作,但是我不能完全正确地在值的范围内迭代算法。
数据:https://www.dropbox.com/s/y78pynq9onyw9iu/Data.csv?dl=0
到目前为止,我得到的是归一化的玩具数据,看起来像弹枪爆炸,目标区域之一在黑线之间隔离,增量为0.25:
import csv
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import pyplot as plt
import seaborn as sns
Data=pd.read_csv("Data.csv")
g = sns.jointplot(x="x", y="y", data=Data)
bottom_lim = 0
top_lim = 0.25
temp = Data.loc[(Data.y>=bottom_lim)&(Data.y<top_lim)]
g.ax_joint.axhline(top_lim, c='k', lw=2)
g.ax_joint.axhline(bottom_lim, c='k', lw=2)
# we have to create a secondary y-axis to the joint-plot, otherwise the kde
might be very small compared to the scale of the original y-axis
ax_joint_2 = g.ax_joint.twinx()
sns.kdeplot(temp.x, shade=True, color='red', ax=ax_joint_2, legend=False)
ax_joint_2.spines['right'].set_visible(False)
ax_joint_2.spines['top'].set_visible(False)
ax_joint_2.yaxis.set_visible(False)
现在我要做的是在每个0.25数据带上对该数据做一个脊线/曲线图。
我尝试了各种Seaborn示例中的一些技术,但是并没有真正解释y轴的范围或值范围。结果,我正努力将我编写的算法转换为工作代码。
答案 0 :(得分:1)
我不知道这是否正是您要寻找的东西,但希望这能使您陷入困境。我对python的了解也很少,所以这里有一些R:
library(tidyverse)
library(ggridges)
data = read_csv("https://www.dropbox.com/s/y78pynq9onyw9iu/Data.csv?dl=1")
data2 = data %>%
mutate(breaks = cut(x, breaks = seq(-1,7,.5), labels = FALSE))
data2 %>%
ggplot(aes(x=x,y=breaks)) +
geom_density_ridges() +
facet_grid(~breaks, scales = "free")
data2 %>%
ggplot(aes(x=x,y=y)) +
geom_point() +
geom_density() +
facet_grid(~breaks, scales = "free")
请原谅格式不良的轴。