#r #ggplot2
#r #ggplot2
Вопрос:
Я хотел бы отобразить следующие данные с помощью ggplot2:
res = structure(list(x = c(0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0.301029995663981, 0.301029995663981, 0.301029995663981,
0.301029995663981, 0.301029995663981, 0.301029995663981, 0.477121254719662,
0.477121254719662, 0.477121254719662, 0.477121254719662, 0.477121254719662,
0.602059991327962, 0.602059991327962, 0.698970004336019, 0.698970004336019,
0.698970004336019, 0.778151250383644, 0.778151250383644, 0.903089986991944,
1, 1, 1, 1.04139268515823, 1.04139268515823, 1.07918124604762,
1.07918124604762, 1.14612803567824, 1.14612803567824, 1.17609125905568,
1.17609125905568, 1.17609125905568, 1.20411998265592, 1.23044892137827,
1.25527250510331, 1.25527250510331, 1.27875360095283, 1.30102999566398,
1.30102999566398, 1.30102999566398, 1.30102999566398, 1.34242268082221,
1.34242268082221, 1.38021124171161, 1.39794000867204, 1.39794000867204,
1.41497334797082, 1.47712125471966, 1.47712125471966, 1.47712125471966,
1.47712125471966, 1.51851393987789, 1.53147891704226, 1.54406804435028,
1.55630250076729, 1.57978359661681, 1.57978359661681, 1.60205999132796,
1.60205999132796, 1.6232492903979, 1.6232492903979, 1.64345267648619,
1.65321251377534, 1.66275783168157, 1.68124123737559, 1.7160033436348,
1.7160033436348, 1.73239375982297, 1.74036268949424, 1.75587485567249,
1.77815125038364, 1.77815125038364, 1.77815125038364, 1.81954393554187,
1.8750612633917, 1.88081359228079, 1.88649072517248, 1.89762709129044,
1.90308998699194, 1.94448267215017, 1.95424250943932, 1.97772360528885,
1.99563519459755, 2.00432137378264, 2.01703333929878, 2.02118929906994,
2.02530586526477, 2.04532297878666, 2.05690485133647, 2.07918124604762,
2.07918124604762, 2.08635983067475, 2.12385164096709, 2.12385164096709,
2.13033376849501, 2.14921911265538, 2.15533603746506, 2.18184358794477,
2.19312459835446, 2.20411998265592, 2.2148438480477, 2.23299611039215,
2.25527250510331, 2.26245108973043, 2.26481782300954, 2.2718416065365,
2.31806333496276, 2.32837960343874, 2.34635297445064, 2.37839790094814,
2.38021124171161, 2.41497334797082, 2.45024910831936, 2.47712125471966,
2.49415459401844, 2.52244423350632, 2.55630250076729, 2.56110138364906,
2.56348108539441, 2.61909333062674, 2.6222140229663, 2.62634036737504,
2.64738297011462, 2.67117284271508, 2.67942789661212, 2.72997428569956,
2.73957234445009, 2.74429298312268, 2.75127910398334, 2.8234742291703,
2.8481891169914, 2.86451108105839, 2.89042101880091, 2.92737036303902,
2.9484129657786, 2.96142109406645, 2.99431715266964, 2.99956548822598,
3.04060234011407, 3.04218159451577, 3.05230909964732, 3.1034616220947,
3.10754912974469, 3.14921911265538, 3.16554107672237, 3.21669359916975,
3.26245108973043, 3.34321159017975, 3.45024910831936, 3.5194341949137,
3.56336240948661, 3.62634036737504, 3.64443858946784, 3.7394141026987,
3.74138799247927, 3.75127910398334, 3.82059549654449, 3.8481891169914,
3.86433305503339, 3.88756104093001, 3.92737036303902, 3.94556705344239,
3.96123119704466, 3.994361151908, 3.99673051543515, 4.04040452891416,
4.05238609538937, 4.10356428005096, 4.10734566547209, 4.16533337259698,
4.21648259735246), y = c(1.65321251377534,
2.35983548233989, 2.65321251377534, 3.65379118738781, 3.95486937106648,
4.13097669160562, 4.2559234587329, 4.35283828998107, 4.43202274815908,
4.49895806578639, 1.95424250943932, 2.43775056282039, 2.65224634100332,
2.95424250943932, 3.95482118305179, 4.55692936239444, 2.13033376849501,
2.50379068305718, 3.13033376849501, 4.13091244210747, 4.60806582276434,
2.56110138364906, 2.9532763366673, 2.61172330800734, 2.64933485871214,
3.6534054906645, 2.64836001098093, 3.12936759572299, 3.25430633233129,
2.95036485437612, 3.35121634533934, 3.95443548632848, 1.54406804435028,
3.35102285258412, 2.94939000664491, 3.43039759138697, 3.43007505555194,
3.49734438101758, 1.49136169383427, 3.1264561134318, 4.13052674538416,
3.55533632799527, 3.49692964807321, 3.12548126570059, 3.60648885044265,
1.43136376415899, 3.2513948500401, 3.55485243437205, 3.65195606953307,
4.25546548199246, 1.84509804001426, 3.60605874941031, 3.25042000230889,
3.34830486304816, 4.35237549500052, 3.65137494391304, 1.79239168949825,
3.34733001531695, 3.42748610909579, 4.43155674104815, 2.02118929906994,
4.49850353067876, 3.4944328987264, 3.42651126136458, 1.73239375982297,
4.55649547765645, 3.55242484570409, 3.95298606519706, 3.49345805099519,
4.60764800010383, 2.14612803567824, 1.96848294855394, 3.60346915973384,
3.55144999797288, 3.64884770837289, 3.95240493957702, 3.60260252042026,
2.24303804868629, 1.90848501887865, 2.09342168516224, 3.64806712944893,
4.12907732425274, 2.32221929473392, 2.19033169817029, 2.03342375548695,
2.38916608436453, 4.12846389106476, 4.25401606086104, 2.44715803134222,
2.26951294421792, 2.13033376849501, 2.4983105537896, 4.35090671553786,
3.94987770403687, 2.33645973384853, 4.25338647298777, 2.53147891704225,
2.20951501454263, 2.39445168082622, 3.94909712511292, 4.43007505555194,
2.27646180417324, 4.35028679289621, 2.4456042032736, 2.49136169383427,
4.49699879774009, 2.33445375115093, 4.12596896309256, 4.42946157675723,
4.55497345833324, 2.38560627359831, 4.1251883841686, 2.42813479402879,
4.60612329172563, 4.49638990246769, 4.25090769970086, 4.55438011841261,
2.83250891270624, 4.60553129449641, 4.2501271207769, 4.34781771270891,
2.79239168949825, 4.34703713378495, 4.42699895875654, 3.00860017176192,
4.42621837983258, 4.49393182177355, 2.72916478969277, 4.55191332349795,
4.49316516946319, 2.96848294855394, 3.13353890837022, 4.60304688910324,
4.55115711644088, 4.60230963888826, 2.90525604874845, 3.23044892137827,
3.09342168516224, 3.3096301674259, 3.19033169817029, 3.03019478535675,
3.37657695705651, 3.26951294421792, 3.4345689040342, 3.12710479836481,
3.33645973384853, 3.48572142648158, 3.20628604441243, 3.5321171162488,
3.39445168082622, 3.4456042032736, 3.27323283404305, 3.49094120535679,
3.33122478102073, 3.38237730346811, 3.42764837118693, 3.83314711191279,
3.79197120102077, 4.00919585351952, 3.72875947516787, 3.96806246007645,
4.13411332984232, 3.9048777669634, 4.2310105861795, 4.09300119668475,
4.31018332757169, 4.18991120969281, 4.02983001931066, 4.37710581726905,
4.26909245574043, 4.43507953840449, 4.12674814156019, 4.33599917760813,
4.48621788466797, 4.20593479368468, 4.39396107133753, 4.44509021759835,
4.27286227558891, 4.33083974120847, 4.38198100004346), z= c(0.999955575299867,
0.995494691765546, 0.999955172027345, 0.999926033679331, 0.99991678686342,
0.999904897765098, 0.999889045047711, 0.999866850117616, 0.999833555259654,
0.999778073679538, 1, 0.995646349631614, 0.995651686652471, 1,
0.999972262287807, 0.999778073679538, 1, 0.995641873770785, 1,
0.999968299255032, 0.999778073679538, 0.995637388697481, 0.996218639615977,
0.99563289438323, 0.98973439426202, 0.999531546635765, 0.996346520228623,
0.995630590442202, 0.995700614858305, 0.991237206774749, 0.995421737403938,
0.99944524575613, 0.890804087072412, 0.996706453948752, 0.997894212480754,
0.9952313503305, 0.997214353163362, 0.995156171705362, 0.797734340293203,
0.99412074211333, 0.999524488825487, 0.99510347821892, 0.997279820563602,
0.998398645711802, 0.995074011754091, 0.808240781874722, 0.994498636216541,
0.997274349944522, 0.997534455977712, 0.999556180190842, 0.911526659847912,
0.997341917233643, 0.998520641671675, 0.994814416855481, 0.999866850117616,
0.996400305727459, 0.87661760128074, 0.998528415594123, 0.994995278564684,
0.999944518419885, 0.923766915954416, 0.999926024559846, 0.995013004366604,
0.998512747875354, 0.892048739271579, 0.999889036839769, 0.995296444594529,
0.998363474980584, 0.998449020496791, 1, 0.937391381845729, 0.88630698005698,
0.995683663764723, 0.998456268995128, 0.996942725412362, 0.997753245312327,
0.998463676933206, 0.932063520385405, 0.906784188034188, 0.902655853125975,
0.999211025912868, 0.998319860516722, 0.935141772717124, 0.892675528593095,
0.916625818813778, 0.933979974968711, 0.99797115232208, 0.998816480508913,
0.936082151326681, 0.900781424425095, 0.909648496743688, 0.941749529696318,
0.998801651058542, 0.998224786419616, 0.902713212944752, 0.998446630667949,
0.948403003474168, 0.914512167894619, 0.905409638015124, 0.999195606346389,
0.998779405237461, 0.915854639728232, 0.998402201411389, 0.906857475588999,
0.919802756920318, 0.998890368397692, 0.918407982460065, 0.998636867966397,
0.998446515756769, 0.999001331557923, 0.917002597867957, 0.999144079885877,
0.926101087078337, 0.998890368397692, 0.998520491196923, 0.998964420445299,
0.998335552596538, 0.965786613531383, 0.998890368397692, 0.999260300318071,
0.998979184235054, 0.945068381487184, 0.999201100705694, 0.999223257878384,
0.970512204607325, 0.9992787394585, 0.999482171918923, 0.949076170636718,
0.999445184198846, 0.999556147359077, 0.955345091849107, 0.972770560769266,
0.999556147359077, 0.999556147359077, 0.999556147359077, 0.957312469974607,
0.976758309780197, 0.961975867967269, 0.978470254957507, 0.967741935483871,
0.960958809116546, 0.980911021498962, 0.968909348441926, 0.98101693279946,
0.964121370675761, 0.970412083323391, 0.982320091691662, 0.966808309726157,
0.986710717719865, 0.971368614019007, 0.973053381130051, 0.969099716051445,
0.980818067506595, 0.969583675044624, 0.971053722535177, 0.977810103799403,
0.990208587595695, 0.984134028625319, 0.991377397368838, 0.983079995561966,
0.986875891583452, 0.992861898069384, 0.985607861784752, 0.993919488704452,
0.989163399659738, 0.994340878828229, 0.990546358350717, 0.988423699977809,
0.995117620949845, 0.991455836662228, 0.995561473590768, 0.989525542585771,
0.992454505104305, 0.995339547270306, 0.99106746560142, 0.992898357745229,
0.991788726142921, 0.991862701583074, 0.992454505104305, 0.992676431424767
)), row.names = c(NA, -180L), class = c("tbl_df", "tbl", "data.frame"
))
Когда я пытаюсь
ggplot(res,
aes(x = x,
y = y,
fill = z))
geom_raster(interpolate = TRUE)
Я получаю
Warning messages:
1: Raster pixels are placed at uneven horizontal intervals and will be shifted. Consider using geom_tile() instead.
2: Raster pixels are placed at uneven vertical intervals and will be shifted. Consider using geom_tile() instead.
Я также не смог geom_tile()
приступить к работе, ни geom_contour()
.
ggplot(res,
aes(x = x,
y = y,
z = z))
geom_contour()
говорит мне
Warning messages:
1: stat_contour(): Zero contours were generated
2: In min(x) : no non-missing arguments to min; returning Inf
3: In max(x) : no non-missing arguments to max; returning -Inf
Что я делаю не так и что я могу сделать, чтобы получить результаты?
То, что я хотел увидеть, было чем-то вроде
или
Дело в том, что я хочу ожидать, что этот 3D-набор данных в природе будет таким, чтобы я мог делать выводы из этого. Числа с плавающей точкой довольно сложно разделить по цвету или размеру. Итак, я хотел хотя бы увидеть шаблон. По крайней мере, такова была идея.
Комментарии:
1. @zx8754: Вовсе не дубликат: я не пытаюсь построить плотность. Я хочу иметь z-значение. Или я что-то упускаю?
2. Если вы используете
geom_tile(width = 0.1, height = 0.1)
, это действительно что-то показывает. Что вы хотите увидеть?3. @Bas: Я добавил уточнение.
Ответ №1:
Трудность здесь заключается в том, что у вас есть разреженный набор значений x и y, каждому из которых соответствует значение z. Я предполагаю, что вы хотите обработать их как точечные образцы поверхности и построить предполагаемую поверхность. Мы можем сделать это, только если мы интерполируем значения z в регулярно расположенных точках сетки x, y, и мы можем сделать это разумно только в пределах выпуклой оболочки ваших точек. Я думаю, вы пытались заставить geom_raster
сделать это с помощью interpolate
, но его способность делать это с нерегулярно расположенными точками ограничена.
Одним из решений является получение 2D-интерполяции с использованием interp
из akima
пакета:
library(akima)
grid <- with(res, interp(x = x, y = y, z = z, linear = TRUE, extrap = TRUE,
xo = seq(min(x), max(x), length = 100),
yo = seq(min(y), max(y), length = 100)))
df <- as.data.frame(interp2xyz(grid))
Теперь df представляет собой обычную сетку интерполированных точек, поэтому мы можем легко вызвать geom_raster
. В демонстрационных целях мы добавим точки x, y, чтобы показать, насколько разрежены данные, из которых это было восстановлено:
ggplot(df, aes(x, y, fill = z))
geom_raster(interpolate = TRUE)
geom_point(data = res, alpha = 0.2)
scale_fill_gradientn(colours = c("red", "gold", "forestgreen"),
na.value = "#FFFFFF00")
Обратите внимание, что все, что находится за пределами выпуклой оболочки (т. Е. Общий контур точек), является NA
, поскольку мы не можем предположить, что там может происходить из нашего образца.
По этой причине заполненный контурный график работает не слишком хорошо:
df$z[is.na(df$z)] <- mean(df$z, na.rm = TRUE)
ggplot(df, aes(x, y, fill = z))
stat_contour_filled(aes(z = z, fill = ..level..))