r - 带有ggplot2(R)的每个系列密度2d的单个时装线
问题描述
我有一个名为的数据集(可在这篇文章的底部找到)q
,它说明了 70 个(x,y)坐标来研究电荷周围的电场(7 个电场值,因此每个给定电场有 10 个坐标)。我想为每个电场绘制等势线。这是该数据的散点图,使用ggplot2
:
如果要跟踪它们(基于每个系列),您可以清楚地看到应该在哪里绘制线条。
遇到这篇文章后,我尝试使用,geom_density2d
但这是我得到的:
更改h
参数也没有达到预期的效果:
如何让s显示每个系列的单行并让该行尽可能接近我的数据?
ggplot2
geom_density2d
PS这是原始数据(csv格式):
"E";"x";"y";"Voltage"
"E=4.368 (V)"; 33;-6;4.368
"E=4.368 (V)"; 39;-16;4.368
"E=4.368 (V)"; 54;-22;4.368
"E=4.368 (V)"; 66;-17;4.368
"E=4.368 (V)"; 70;-14;4.368
"E=4.368 (V)"; 71;-2;4.368
"E=4.368 (V)"; 36;6;4.368
"E=4.368 (V)"; 51;12;4.368
"E=4.368 (V)"; 64;13;4.368
"E=4.368 (V)"; 70;4;4.368
"E=3.745 (V)"; 6;-69;3.745
"E=3.745 (V)"; 44;-48;3.745
"E=3.745 (V)"; 64;-35;3.745
"E=3.745 (V)"; 77;-15;3.745
"E=3.745 (V)"; 80;-2;3.745
"E=3.745 (V)"; 78;8;3.745
"E=3.745 (V)"; 71;22;3.745
"E=3.745 (V)"; 63;30;3.745
"E=3.745 (V)"; 46;40;3.745
"E=3.745 (V)"; 24;46;3.745
"E=3.120 (V)"; 64;-90;3.120
"E=3.120 (V)"; 70;-73;3.120
"E=3.120 (V)"; 74;-58;3.120
"E=3.120 (V)"; 80;-45;3.120
"E=3.120 (V)"; 88;-18;3.120
"E=3.120 (V)"; 89;-2;3.120
"E=3.120 (V)"; 88;10;3.120
"E=3.120 (V)"; 84;29;3.120
"E=3.120 (V)"; 75;49;3.120
"E=3.120 (V)"; 68;66;3.120
"E=2.495 (V)";102;-96;2.495
"E=2.495 (V)";101;-73;2.495
"E=2.495 (V)";101;-44;2.495
"E=2.495 (V)";102;-22;2.495
"E=2.495 (V)";101;-1;2.495
"E=2.495 (V)";101;10;2.495
"E=2.495 (V)";100;25;2.495
"E=2.495 (V)";100;39;2.495
"E=2.495 (V)";100;48;2.495
"E=2.495 (V)"; 99;52;2.495
"E=1.870 (V)";139;-89;1.870
"E=1.870 (V)";132;-66;1.870
"E=1.870 (V)";124;-46;1.870
"E=1.870 (V)";115;-24;1.870
"E=1.870 (V)";112;-5;1.870
"E=1.870 (V)";114;18;1.870
"E=1.870 (V)";115;23;1.870
"E=1.870 (V)";123;41;1.870
"E=1.870 (V)";127;54;1.870
"E=1.870 (V)";131;69;1.870
"E=1.247 (V)";175;-53;1.247
"E=1.247 (V)";158;-47;1.247
"E=1.247 (V)";142;-37;1.247
"E=1.247 (V)";127;-20;1.247
"E=1.247 (V)";121;-6;1.247
"E=1.247 (V)";124;11;1.247
"E=1.247 (V)";140;30;1.247
"E=1.247 (V)";145;34;1.247
"E=1.247 (V)";155;39;1.247
"E=1.247 (V)";168;45;1.247
"E=0.625 (V)";149;-21;0.625
"E=0.625 (V)";157;-20;0.625
"E=0.625 (V)";137;-16;0.625
"E=0.625 (V)";164;-15;0.625
"E=0.625 (V)";131;-8;0.625
"E=0.625 (V)";169;-5;0.625
"E=0.625 (V)";167;7;0.625
"E=0.625 (V)";161;14;0.625
"E=0.625 (V)";137;18;0.625
"E=0.625 (V)";149;20;0.625
解决方案
所以这可能是关于如何绘制它的部分答案,并且有一些缺点。geom_smooth
/问题的解决方案geom_line
可能在 中geom_path
,它不需要沿 y 轴对数据点进行排序,但它确实需要在数据中对其进行排序。
一个解决方案geom_path
可能如下所示(假设zz
您发布的数据用引号括起来):
df <- read.csv(text = zz, sep = ";", header = F)
ggplot(df, aes(V2, V3, colour = V1)) +
geom_point() + # For visualisation purposes
geom_path()
现在显然,这并不理想。从您之前的示例中,我假设您希望对点之间的路径进行一些平滑处理。其次,由于该E=0.625 (V)
组没有按照我们预期的路径排序,因此该组的显示效果不佳。
为了解决第一个问题,我们可以使用 ggforce 包拟合样条曲线而不是路径:
library(ggforce)
ggplot(df, aes(V2, V3, colour = V1)) +
geom_point() +
geom_bspline()
要解决第二个问题,您必须重新排序数据,在下面的示例中,我是手动完成的,但也许有更简单的方法。
# Note that the 27th row is included twice to close the ellipse
df2 <- df[c(1:27, 29, 31, 35, 36, 34, 33, 32, 30, 28, 27),]
ggplot(df2, aes(V2, V3, colour = V1)) +
geom_point() +
geom_bspline()
此外,您可以尝试实施他们在此处所做的事情。
推荐阅读
- reactjs - 功能组件的状态变化不大
- javascript - 如何在 fs.readFile 和其他非导入路径中使用 Typescript 中的路径
- ionic-framework - Ionic 3 禁用键盘推送
- unity3d - 我使用 objImporter 创建统一不是问题,但我导入创建 3dmax 是问题
- python - python scipy中excel的LOGNORM.INV函数
- java - @JmsListener 听多个主题是只听一个主题
- xamarin.forms - 如何在 xamarin 表单共享项目中检查 Internet 连接
- javascript - 我想在我的 svg 图像上放置一个滚动条,以便它只占据我网页上的特定区域
- reactjs - 如何在每条路线上呈现具有工作功能的组件?
- c++ - 将嵌套的基模板类实例声明为派生类的朋友