Drawing Separated Shaded Areas in R Plot - r
I'm trying to draw a figure of waveforms. I want to show which part of the waveforms are statistically significant. Currently, I draw a semi-transparent polygon:
plot(wave,
type = "l",
col = "red",
lwd = linewid,
pch = 19,
lty = 1,
xlab = "Time",
xaxt = "n",
xlim = c(1,duration/2),
ylab = "Difference",
ylim = c(-1, 1))
abline(h = 0)
sig <- ifelse(pval<.05,wave,0)
polygon(c(1:length(sig)),
sig,
col = rgb(1,0,0,0.5),
border = NA)
But the polygon isn't centered on the zero line of the y-axis. I'd like to shade only the areas underneath the curve of the wave. Instead, the polygon extends above the zero-line on the y-axis. Any ideas?
wave <- c(0.0484408316308237, 0.0474054439781486, 0.0467022242629086,
0.046515614318914, 0.0466686947981267, 0.0466777796491931, 0.0460966374555009,
0.0457341620230469, 0.0455045060507858, 0.0457719372614871, 0.0461446812125276,
0.0460051963987539, 0.0456347093964464, 0.0430700479769684, 0.0435837207487517,
0.0443970279017918, 0.0457508738133201, 0.0472350978374988, 0.0482361020656729,
0.0494006907171422, 0.0504508971582255, 0.0521263688769232, 0.0532433489463588,
0.0537137380543864, 0.0540428548151276, 0.0544949143122896, 0.0544225549891838,
0.0538337952743033, 0.053135984213764, 0.0523491809303349, 0.0520472332622518,
0.0517736309847163, 0.0518684887760298, 0.0514603496453925, 0.050769752723635,
0.0504389714171051, 0.0502927164308292, 0.0504354031597342, 0.0498799936275558,
0.0490825606436222, 0.0497213009991454, 0.0501938355481634, 0.0514117871384259,
0.0519380643522052, 0.0517968505801706, 0.05123157072507, 0.0520909551474945,
0.0486858357936371, 0.0493763701994425, 0.0500160784148426, 0.0505488877007248,
0.0497678090074788, 0.0480758661250716, 0.0462675525180396, 0.0453516919016191,
0.0448339366059345, 0.0445615385738649, 0.044013178561506, 0.0439648543393159,
0.0438670362724258, 0.0440913799994017, 0.0507925460506875, 0.0509727145985309,
0.0510872776847506, 0.0508104967241469, 0.0503812271559447, 0.0503631548556902,
0.0505562349708585, 0.050869650537224, 0.050115073380279, 0.0496307336460131,
0.0486946602966385, 0.0451240814629419, 0.0439636677233932, 0.0428989167765818,
0.0420026704819646, 0.0411584695778936, 0.0403788602838661, 0.040233539087147,
0.0397175149422268, 0.0389289880494877, 0.0378327839257036, 0.0360351888196015,
0.0347926091711749, 0.0341079891575494, 0.0348740749311286, 0.0349125506875405,
0.0352951033387814, 0.0344798859212136, 0.0327899391390952, 0.0303925310234825,
0.0275215845941342, 0.0265832329092289, 0.0220646495463752, 0.0122404036320984,
0.00743877530625988, 0.00181246669131438, -0.00479231506410288,
-0.0117717813867494, -0.0192370027513411, -0.027223713620762,
-0.0348613553743107, -0.0397127268587883, -0.045622681570717,
-0.0515358709254366, -0.0568288397365667, -0.0620165857779051,
-0.0669105535816898, -0.0720264470900791, -0.0766882017731929,
-0.0804427064040755, -0.0815328596670379, -0.0826051939881404,
-0.0879974600724217, -0.0924894198404777, -0.0949544486488778,
-0.104737046247734, -0.11695750473657, -0.132892205151458, -0.15164997657278,
-0.172597865364775, -0.196113512673009, -0.216646106105455, -0.244400723622597,
-0.267988695108909, -0.292598978473393, -0.317086468049069, -0.342530108945073,
-0.368486808868852, -0.399730966642985, -0.433385374917961, -0.469543692326107,
-0.507867318915593, -0.547443797215136, -0.586749203029937, -0.625603126037644,
-0.6626968183054, -0.697811797372003, -0.730226229712439, -0.760716192518167,
-0.789754092566875, -0.819837732291987, -0.844265792897494, -0.865853848085839,
-0.88772546496204, -0.908008383337203, -0.926193346905058, -0.943720637018896,
-0.958657012974673, -0.971195039738284, -0.981680462787076, -0.989209920087862,
-0.994760927508405, -0.998179967730494, -1, -0.99985631234348,
-0.998513746223383, -0.996286337260218, -0.994167673024296, -0.992029087667234,
-0.98942063019129, -0.986657143470197, -0.982080217651251, -0.97535310006632,
-0.967706563058861, -0.959931873177486, -0.953053148939477, -0.945050149326435,
-0.936863678952672, -0.927476791110897, -0.917244708485839, -0.910092208942064,
-0.898659859433262, -0.887894272800133, -0.874966302881798, -0.860464316462603,
-0.843766510522863, -0.826854760379226, -0.809030674702751, -0.790830214526396,
-0.773448702041121, -0.757822022781962, -0.742415284193991, -0.726650963278141,
-0.708671839205669, -0.690647887135473, -0.669566331925841, -0.647484673858103,
-0.625415272964118, -0.603346317669516, -0.580945690740634, -0.559174605387308,
-0.537166524153666, -0.514979755494959, -0.492190905789554, -0.4688961948937,
-0.445648845564897, -0.421370990246327, -0.394957034231288, -0.367257387362894,
-0.339759436905685, -0.31347732732076, -0.287795514335449, -0.263477496955318,
-0.240335559473844, -0.219537822868833, -0.199356394938618, -0.182724128026289,
-0.162855943390834, -0.143113588174923, -0.122168088165277, -0.100967800471397,
-0.0777710229443332, -0.0539643915465976, -0.029677750446946,
-0.00631959566058126, 0.0169258078383277, 0.0389612599575379,
0.0609770118878408, 0.0806172669927091, 0.102073705616963, 0.122665362014863,
0.142328282171209, 0.161475578433955, 0.17913203293436, 0.199700604404855,
0.216864487908698, 0.232810273813389, 0.248031682891701, 0.262732844598723,
0.276791405782004, 0.289592381780554, 0.302904563305743, 0.315933177369042,
0.331194285957781, 0.34328787498597, 0.355317635956366, 0.37161156141851,
0.385496981280364, 0.39906005718835, 0.410609126043194, 0.424557700817611,
0.432614645845991, 0.440840405298792, 0.446859449278095, 0.451067862561763,
0.454108550491332, 0.45822766032593, 0.463669025285741, 0.468751886735504,
0.477222371161998, 0.480825169330004, 0.484778309657409, 0.490686208003411,
0.496271560877119, 0.502429910894803, 0.504627189056216, 0.509277950091572,
0.512796647131139, 0.51920303298796, 0.526246371444159, 0.530172995082546,
0.537137361380815, 0.540646539738041, 0.541350429187775, 0.538037378748107,
0.53640396369579, 0.533982169384575, 0.531715003489143, 0.537771148135836,
0.541774025400292, 0.542397661260989, 0.542734418123511, 0.541900634648552,
0.551336284191385, 0.550830246001875, 0.543935588412506, 0.54850236576883,
0.546095769955119, 0.546560717106744, 0.54862072115046, 0.549873891251691,
0.549022573851835, 0.556546139368112, 0.560110491782052, 0.563328136311772,
0.556118487214394, 0.556145005611977, 0.56177222985652, 0.56211974460993,
0.563139174079545, 0.567595800986669, 0.564911164049346, 0.55370467099592,
0.549142761248365, 0.553638360274585, 0.552297050636191, 0.551520866080127,
0.545782391084414, 0.550845817729848, 0.551708815237408, 0.552680776857495,
0.560806019030281, 0.566586972251016, 0.570035930685996, 0.57778944843747,
0.575407636591647, 0.576215607600804, 0.580856907896507, 0.58111203256702,
0.580550879830819, 0.579468018580888, 0.569996133796829, 0.571472497444831,
0.570186841693214, 0.579257568699911, 0.585984875703449, 0.592864903673866,
0.592890757109184, 0.602046235792163, 0.613343736000507, 0.61690652667541,
0.615073893877543, 0.603386282668406, 0.605140483512513, 0.602317438726602,
0.601349093084652, 0.60175903066173, 0.595748856842631, 0.592466664315233,
0.579486755875179, 0.561987007946437, 0.542492099234415, 0.526383565525105,
0.5230428319822, 0.513300797695766, 0.515049254563791, 0.518848257099875,
0.506235765674015, 0.49998294091854, 0.506344856229246, 0.50475172054043,
0.507702294279798, 0.506348179486846, 0.517341319120319, 0.523551522223028,
0.530756340907612, 0.53032745351512, 0.533111198195776, 0.526453901436172,
0.529598066926201, 0.523624800099041, 0.516232193418245, 0.517039928536979,
0.501904786914197, 0.49713387651536, 0.505916234878408, 0.502395600515955,
0.489414472392961, 0.476329169842886, 0.485088777888902, 0.48219652186471,
0.469886812116599, 0.453441250799586, 0.441168281111148, 0.437074892507931,
0.438771226156789, 0.434582625256592, 0.434393831049118, 0.455313871944686,
0.46667176154786, 0.451614470975422, 0.446531804915084, 0.448747422127997,
0.442389961671837, 0.452345098594434)
pval <- structure(c(0.0237628302370617, 0.0262165284800235, 0.0285686821840486,
0.0297087853681475, 0.0299733840361694, 0.0301202024224222, 0.0323058180308351,
0.0339316553612034, 0.0381144580106053, 0.04487408115707, 0.057804021059368,
0.085158184225468, 0.136972404452296, 0.0594954230338983, 0.059815561375559,
0.0586890211651837, 0.054984325985342, 0.0505545271596015, 0.0488952044969173,
0.0471087059136155, 0.0460746356928649, 0.0424450757403614, 0.0405444189843919,
0.0411829464282132, 0.0412927140116675, 0.0417488854396546, 0.0445117370815736,
0.0550285077721912, 0.0747425914230263, 0.111097457523042, 0.15043556390993,
0.0494268999973122, 0.0517649576685409, 0.0562362352328751, 0.0608441259158306,
0.0635243703413948, 0.0648470007376663, 0.0649911512153626, 0.0678711704637943,
0.0714853336274117, 0.0656394713851027, 0.0631287997230727, 0.0691221286169588,
0.0998026839190638, 0.149978285257545, 0.195667278177658, 0.139258740157594,
0.0641286728653938, 0.0590485245121715, 0.0549751823968685, 0.0525288256855241,
0.0566756473108664, 0.0675151254516982, 0.0797001157496837, 0.0893120076127157,
0.101040948627555, 0.113937187901608, 0.136477809610576, 0.151438694370951,
0.168116109618061, 0.167693574892715, 0.055626851340157, 0.055837522780422,
0.0561583595040639, 0.0594879473890239, 0.0632759635313892, 0.065859251440062,
0.065772893740802, 0.0639366385273011, 0.0671023312185317, 0.0694330478072044,
0.0733540770931381, 0.0927895033698356, 0.0987657684863097, 0.106752925133343,
0.113783571923594, 0.121501003290016, 0.129032949168017, 0.136116836003546,
0.151762019664018, 0.175690091657166, 0.202670406948741, 0.246692883279612,
0.29427387065597, 0.339407794720914, 0.437126245014218, 0.457917873424833,
0.481184291252777, 0.523332782522114, 0.577097846183451, 0.630184174499617,
0.685063979797142, 0.719978579352288, 0.772396520583243, 0.880445896200477,
0.930819867424807, 0.983821279666508, 0.958549578396286, 0.901224976502897,
0.843510707377769, 0.785288039341357, 0.732678879305588, 0.705605278527497,
0.668649736650829, 0.632671877729848, 0.601886683772611, 0.572995378718532,
0.547203236154384, 0.522892433560929, 0.50484004632912, 0.495167623435313,
0.501651238918971, 0.508756506196948, 0.504741256872503, 0.496754657283146,
0.483869763822611, 0.453324086883336, 0.417453905522249, 0.37213400662027,
0.324969615847784, 0.279986826269611, 0.238305111925328, 0.217603724159869,
0.18615434974012, 0.165914268934125, 0.148553539851396, 0.134089539639757,
0.120930326838334, 0.108816102552138, 0.0943727175866119, 0.0809908262000654,
0.0688676027935202, 0.057965295683139, 0.0485177042268327, 0.0406774650506777,
0.0343750114181405, 0.0296041466961569, 0.0257754426846805, 0.0228491378540575,
0.0203762486696415, 0.0182050611089517, 0.0151389244136079, 0.0143291699625514,
0.0135272132937536, 0.0129494727394939, 0.0125413188392993, 0.0120654899893143,
0.0115593848885709, 0.0110971538277043, 0.0106563593895204, 0.0102594799209655,
0.00995618264115798, 0.00976027085065125, 0.00966493285702107,
0.0096809864774456, 0.00984417807568116, 0.0101140178609648,
0.0104536689988165, 0.0107455438459773, 0.0109879390786196, 0.0112476004827354,
0.0115064972197262, 0.0118436117195952, 0.012250241785758, 0.0127098856583327,
0.0131923546938643, 0.0135900513062996, 0.0140907822475909, 0.0146146781894138,
0.0153666265314495, 0.0163587611869966, 0.0165777793501283, 0.0179231032274303,
0.0193146107648153, 0.02112595949975, 0.023429090158608, 0.0263502163261689,
0.029668879819774, 0.0333886702034785, 0.0373851358797521, 0.0414244618086564,
0.0452421641298093, 0.0491730557898139, 0.0534544517392593, 0.0586659192358243,
0.0642835353988069, 0.0717515494462237, 0.0803329713593607, 0.089702211494325,
0.100024733160442, 0.111522126685171, 0.123611882298163, 0.136659951151313,
0.150762549445491, 0.166322127637489, 0.183448713985098, 0.201980927862526,
0.223096893280781, 0.248582577870016, 0.278233697709439, 0.310833681563501,
0.345332013645289, 0.382705067848975, 0.421376239222594, 0.460853428063773,
0.498027141394812, 0.535355843788925, 0.572293181350887, 0.611900790530155,
0.652931049846446, 0.698550246370366, 0.746816303915033, 0.801970397733016,
0.860682735611148, 0.922505922723998, 0.983357734959766, 0.955187832059461,
0.89653477564825, 0.837851886741715, 0.781781567273432, 0.723265191915832,
0.667546011138303, 0.614998358930736, 0.564647511026012, 0.519566323581666,
0.470697912789023, 0.432376848315165, 0.398409375708932, 0.367655920642225,
0.338940852965934, 0.312212428665514, 0.288459290398895, 0.264878592699687,
0.242704842685072, 0.217387439877778, 0.19835325593237, 0.180556517879591,
0.158171361155571, 0.141413156894301, 0.126554452518633, 0.114979049999799,
0.102918102342695, 0.0962216185484208, 0.0901194930496858, 0.0860130895609037,
0.0832340770284259, 0.0812259095628692, 0.078291162078237, 0.0742796112910293,
0.070046963535911, 0.0638805429841068, 0.0600325581294298, 0.0556731158844295,
0.0505107871259209, 0.045748968232586, 0.0409239605265858, 0.038056048177405,
0.0346897761994006, 0.0322017147611021, 0.0290191309178551, 0.0259412764702286,
0.0239876220554575, 0.0213928561132381, 0.0196012142768874, 0.0188687591178971,
0.0191111545249072, 0.0190313087419941, 0.019003849481473, 0.0188195734297014,
0.0172119066683942, 0.015771401215516, 0.0148547142814098, 0.0142875281889536,
0.0138706460080897, 0.0117612653636045, 0.0113802773390233, 0.0119929691882122,
0.011301932221071, 0.0113391829691033, 0.0111974712246918, 0.0109290980999376,
0.0105620733291735, 0.0102904702021988, 0.0088461881724392, 0.00730041492139247,
0.00668346613062251, 0.00766574212937, 0.00783946561969262, 0.00788512630201997,
0.00782058882264157, 0.00767516163055654, 0.00747564784065695,
0.00812968647923146, 0.0091908030084859, 0.00940025876764169,
0.0084452386928757, 0.00773239171673778, 0.00774262750329184,
0.00817566848920374, 0.00775737017229728, 0.00833705507967201,
0.00848219824583305, 0.00775531985314739, 0.00731753429028076,
0.00624994399211075, 0.00566319903650268, 0.00580078551643243,
0.00589284481572378, 0.00557777343775064, 0.00561015236859766,
0.00558045776809902, 0.0062741801741615, 0.00693752198709533,
0.00680148894969647, 0.00682650280136682, 0.00648353640440989,
0.00559647299682892, 0.00560310591626879, 0.00630599774150389,
0.00625849640781645, 0.00496543301213065, 0.00527106355173805,
0.00606524474497961, 0.00782669446225163, 0.00804663337329233,
0.00680216943527376, 0.00549477843115955, 0.00521495965843119,
0.00547975304067046, 0.0058083233283578, 0.00752964959779626,
0.00928425608337011, 0.0121528464847978, 0.0151204119890877,
0.0167466130623839, 0.0184702177828752, 0.0190546966808364, 0.0194217711957074,
0.0172588666752732, 0.0220542021375166, 0.0191777261144048, 0.0207814209894351,
0.0194965472902094, 0.0209260124322778, 0.0170037074001148, 0.0125849197829535,
0.0116502405937885, 0.0120529295967995, 0.0116481500418768, 0.013878269349617,
0.0138614750865797, 0.0153190475349968, 0.0194121459536112, 0.017739167396571,
0.0204726597729821, 0.0245650013533451, 0.0208055307319631, 0.0210348908355722,
0.0278106725250406, 0.035960679421438, 0.0358929798768166, 0.0405937721886476,
0.0510142810649717, 0.0561354348677331, 0.0862664430860822, 0.101130560202344,
0.111832280018731, 0.0774469081405625, 0.0813608282057401, 0.063555234011225,
0.0517641089682014, 0.0663811539378655, 0.0602507226995198, 0.0626085278234381,
0.0676820928084705, 0.0566520960018359), .Dim = c(376L, 1L))
The devil is always in the details with polygon vertices! Using your data from above, here is a solution and some explanation.
Get the polygon vertices, almost
sigy <- ifelse(pval < 0.05, wave, 0)
sigx <- 1:length(wave)
sigxy <- data.frame(sigx, sigy)
This is pretty much what you used in your original question. It doesn't quite work because while the polygon function accepts and connects x,y pairs, it also closes the polygon. Also, your approach was drawing a lot of polygons with zero area. So, some processing of sigxy is necessary to split it into separate polygons. This could be done manually, but it's more fun and useful to automate the process. First, remove the entries where sigy is zero. Then let's replot to see where things stand:
tmp <- sigxy[sigxy$sigy !=0,]
plot(wave, # removed some unnecessary items to simplify
type = "l",
col = "red",
xlab = "Time (by index)",
ylab = "Difference",
ylim = c(-1, 1))
abline(h = 0)
lines(tmp, col = "green")
At this point, we are much closer but are still connecting the dots and not making polygons, since we don't return to the zero line when necessary. Let's create a column that will show us where the polygons should start and stop, then gather that info into a couple of vectors of indices:
tmp$diff <- c(1, diff(tmp$sigx))
st <- 1 # start indices
end <- c() # end indices
for (i in 1:nrow(tmp)) {
if (tmp$diff[i] > 1) end <- c(end, i-1)
if ((tmp$diff[i] > 1) & (i != nrow(tmp))) st <- c(st, i)
if (i == nrow(tmp)) end <- c(end, i-1)
}
Now refresh the plot and add the polygons one at a time
plot(wave, # removed some unnecessary items to simplify
type = "l",
col = "red",
xlab = "Time (by index)",
ylab = "Difference",
ylim = c(-1, 1))
abline(h = 0)
for (i in 1:length(st)) {
DF <- tmp[st[i]:end[i], 1:2] # Just the data to be plotted
# Add the points needed to drop to the zero line
DF <- rbind(c(DF$sigx[1], 0), DF, c(DF$sigx[nrow(DF)],0))
polygon(DF, col = "green")
}
The result:
Bryan Hanson's solution translated into a function:
drawarea <- function(wave, pval, color){
sigy <- ifelse(pval < 0.05, wave, 0)
sigx <- 1:length(wave)
sigxy <- data.frame(sigx, sigy)
tmp <- sigxy[sigxy$sigy !=0,]
tmp$diff <- c(1, diff(tmp$sigx))
st <- 1 # start indices
end <- c() # end indices
for (i in 1:nrow(tmp)) {
if (tmp$diff[i] > 1) end <- c(end, i-1)
if ((tmp$diff[i] > 1) & (i != nrow(tmp))) st <- c(st, i)
if (i == nrow(tmp)) end <- c(end, i-1)
}
for (i in 1:length(st)){
DF <- tmp[st[i]:end[i], 1:2] # Just the data to be plotted
# Add the points needed to drop to the zero line
DF <- rbind(c(DF$sigx[1], 0), DF, c(DF$sigx[nrow(DF)],0))
polygon(DF, col = color, border=NA)
}
}
Related
Julia: "Plot not defined" when attempting to add slider bars
I am learning how to create plots with slider bars. Here is my code based off the first example of this tutorial using Plots gr() using GLMakie function plotLaneEmden(log_delta_xi=-4, n=3) fig = Figure() ax = Axis(fig[1, 1]) sl_x = Slider(fig[2, 1], range = 0:0.01:4.99, startvalue = 3) sl_y = Slider(fig[1, 2], range = -6:0.01:0.1, horizontal = false, startvalue = -2) point = lift(sl_x.value, sl_y.value) do n, log_delta_xi Point2f(n, log_delta_xi) end plot(n, 1 .- log_delta_xi.^2/6, linecolor = :green, label="n = $n") xlabel!("ξ") ylabel!("θ") end plotLaneEmden() When I run this, it gives UndefVarError: plot not defined. What am I missing here?
It looks like you are trying to mix and match Plots.jl and Makie.jl. Specifically, the example from your link is entirely for Makie (specifically, with the GLMakie backend), while the the plot function you are trying to add uses syntax specific to the Plots.jl version of plot (specifically including linecolor and label keyword arguments). Plots.jl and Makie.jl are two separate and unrelated plotting libraries, so you have to pick one and stick with it. Since both libraries export some of the same function names, using both at once will lead to ambiguity and UndefVarErrors if not disambiguated. The other potential problem is that it looks like you are trying to make a line plot with only a single x and y value (n and log_delta_xi are both single numbers in your code as written). If that's what you want, you'll need a scatter plot instead of a line plot; and if that's not what you want you'll need to make those variables vectors instead somehow. Depending on what exactly you want, you might try something more along the lines of (in a new session, using only Makie and not Plots): using GLMakie function plotLaneEmden(log_delta_xi=-4, n=3) fig = Figure() ax = Axis(fig[1, 1], xlabel="ξ", ylabel="θ") sl_x = Slider(fig[2, 1], range = 0:0.01:4.99, startvalue = n) sl_y = Slider(fig[1, 2], range = -6:0.01:0.1, horizontal = false, startvalue = log_delta_xi) point = lift(sl_x.value, sl_y.value) do n, log_delta_xi Point2f(n, 1 - log_delta_xi^2/6) end sca = scatter!(point, color = :green, markersize = 20) axislegend(ax, [sca], ["n = $n"]) fig end plotLaneEmden() Or, below, a simple example for interactively plotting a line rather than a point: using GLMakie function quadraticsliders(x=-5:0.01:5) fig = Figure() ax = Axis(fig[1, 1], xlabel="X", ylabel="Y") sl_a = Slider(fig[2, 1], range = -3:0.01:3, startvalue = 0.) sl_b = Slider(fig[1, 2], range = -3:0.01:3, horizontal = false, startvalue = 0.) points = lift(sl_a.value, sl_b.value) do a, b Point2f.(x, a.*x.^2 .+ b.*x) end l = lines!(points, color = :blue) onany((a,b)->axislegend(ax, [l], ["$(a)x² + $(b)x"]), sl_a.value, sl_b.value) limits!(ax, minimum(x), maximum(x), -10, 10) fig end quadraticsliders() ETA: A couple examples closer to what you might be looking for
R code: When I draw a line graph including multiple lines in R, one of them cannot fully be displayed
I need a graph including three lines and one of them has different y-axes. I wonder why the blue line is so short here? This is my code: library(plotrix) a <- c(41.995 ,41.749, 41.484, 41.200 ,40.898, 40.587, 40.274 ,39.968, 39.672, 39.388, 39.108 ,38.822, 38.521 ,38.202, 37.866, 37.528, 37.205, 36.909 ,36.643 ,36.401, 36.167 ,35.918, 35.631 ,35.289, 34.886 ,34.418, 33.890, 33.320, 32.726, 32.121, 31.517 ,30.924, 30.348, 29.792, 29.258, 28.749, 28.262, 27.789 ,27.324, 26.861, 26.401, 25.944 ,25.489, 25.034 ,24.571 ,24.087 ,23.564 ,22.996, 22.390 ,21.755 ,21.114 ,20.495 ,19.923 ,19.416 ,18.984 ,18.625 ,18.332 ,18.083) b<-c(1960:2017) c<-c(22.184, 21.652, 21.126, 20.608, 20.096, 19.591 ,19.093, 18.603, 18.122, 17.650, 17.187 ,16.730, 16.280, 15.838, 15.408 ,14.994, 14.601, 14.233 ,13.892, 13.577, 13.290, 13.027 ,12.786 ,12.558, 12.337, 12.117, 11.888 ,11.649, 11.398, 11.135 ,10.864, 10.588, 10.316 ,10.055, 9.808, 9.579, 9.370 ,9.179 , 9.003 ,8.841, 8.692 , 8.555 ,8.427 , 8.306 , 8.189 , 8.074 ,7.958 , 7.839, 7.720 ,7.602 , 7.492 ,7.393 , 7.312 , 7.251 ,7.212 ,7.194 ,7.195 , 7.210) d<-c(5.906, 5.902, 5.894, 5.880 ,5.859, 5.830 ,5.794, 5.751 ,5.702, 5.648 ,5.587, 5.519 ,5.444, 5.363, 5.278 ,5.192, 5.108, 5.029 ,4.956, 4.889 ,4.827 ,4.766 ,4.703, 4.636 ,4.563 ,4.484, 4.399 ,4.311, 4.222 ,4.132, 4.045, 3.959 ,3.877 ,3.799 ,3.723 ,3.651 ,3.582 ,3.514 ,3.446, 3.379 ,3.311 ,3.244, 3.176 ,3.109, 3.041, 2.972, 2.899 ,2.823, 2.743 ,2.661, 2.581 ,2.506, 2.439 ,2.381, 2.333 ,2.295, 2.266 ,2.243 ) df1<- data.frame(Year=b,CBR=a,CDR=c,TFR=d) twoord.plot(lx=df1$Year,ly=df1$CBR,rx=df1$Year,ry=df1$TFR,type = "l",xaxs='i',xticklab =c(1960:2019,by=3),xtickpos =c(1960:2019,by=3),xlab = "Year", ylab = "Number",main = 'R') grid() lines(b,c ,type = "l", col = "blue")
Hi welcome to Stackoverflow, in the future please include the library call which has any none base R functions that you use. The below gives you what you want library(plotrix) ypos <- seq(from = 0, to = 50, by = 5) twoord.plot(lx=df1$Year,ly=df1$CBR,rx=df1$Year,ry=df1$TFR,type = "l",xaxs='i' ,xticklab =c(1960:2019,by=3),xtickpos =c(1960:2019,by=3),xlab = "Year", ylab = "Number",main = 'R', lytickpos = ypos, lylim = c(0,50)) grid() lines(x= df1$Year, df1$CDR, type = "l", col = "blue") The blue line is small because some of its values are off the chart. This is because when the limits are picked automatically, CDR is excluded so adding it later with lines() plots only the values above 18, which is only prior to 1970 for CDR. I've passed the lylim as 0 to 50 and I've also added the lytickpos as going from 0 to 50 in increments of 5. Although this answers your question, this graph makes no sense to me.
Error in nls - number of iterations exceeded maximum
I am having an issue when trying to fit my data. This is the data: x = c(1, 1.071519305, 1.148153621, 1.230268771, 1.318256739, 1.412537545, 1.513561248, 1.621810097, 1.737800829, 1.862087137, 1.995262315, 2.13796209, 2.290867653, 2.454708916, 2.630267992, 2.818382931, 3.01995172, 3.235936569, 3.467368505, 3.715352291, 3.981071706, 4.265795188, 4.570881896, 4.897788194, 5.248074602, 5.623413252, 6.025595861, 6.45654229, 6.918309709, 7.413102413, 7.943282347, 8.511380382, 9.120108394, 9.77237221, 10.47128548, 11.22018454, 12.02264435, 12.88249552, 13.80384265, 14.79108388, 15.84893192, 16.98243652, 18.19700859, 19.498446, 20.89296131, 22.38721139, 23.98832919, 25.70395783, 27.54228703, 29.51209227, 31.6227766, 33.88441561, 36.30780548, 38.9045145, 41.68693835, 44.66835922, 47.86300923, 51.2861384, 54.95408739, 58.88436554, 63.09573445, 67.60829754, 72.44359601, 77.62471166, 83.17637711, 89.12509381, 95.4992586, 102.3292992, 109.6478196, 117.4897555, 125.8925412, 134.8962883, 144.5439771, 154.8816619, 165.9586907, 177.827941, 190.5460718, 204.1737945, 218.7761624, 234.4228815, 251.1886432, 269.1534804, 288.4031503, 309.0295433, 331.1311215, 354.8133892, 380.1893963, 407.3802778, 436.5158322, 467.7351413, 501.1872336, 537.0317964, 575.4399373, 616.5950019, 660.693448, 707.9457844, 758.577575, 812.8305162, 870.96359, 933.2543008, 1000) y = c(0, 39.42531967, 81.67031097, 126.9366341, 179.8504534, 237.9146471, 300.9332733, 373.9994125, 452.2911911, 544.5717812, 644.4305916,757.5670443, 880.1954813, 1015.045167, 1160.563695, 1316.477197, 1483.424418, 1668.380672, 1869.099593, 2083.298305, 2308.72922, 2552.533248, 2806.782363, 3074.749213, 3354.913032, 3653.567198, 3961.982443, 4285.416754, 4625.505185, 4974.839962, 5329.418374, 5696.722268, 6069.748689, 6447.903256, 6826.334958, 7218.057591, 7607.64304, 8005.992733, 8403.318251, 8798.355661, 9201.456877, 9613.1821, 10022.47749, 10430.83497, 10841.5067, 11256.68048, 11675.94707, 12085.72448, 12500.17168, 12905.54582, 13311.92593, 13707.0245, 14089.76524, 14459.48122, 14813.21421, 15145.30591, 15459.10593, 15752.7922, 16023.09928, 16269.888, 16493.69043, 16693.68774, 16869.79643, 17021.69506, 17154.34004, 17264.76423, 17355.82129, 17427.48725, 17486.7706, 17530.49824, 17563.61638, 17588.39795, 17605.32753, 17617.36935, 17624.3971, 17629.48694, 17632.2512, 17633.91595, 17634.67971, 17635.11862, 17635.35591, 17635.4941, 17635.61014, 17635.64404, 17635.66099, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794, 17635.67794) EDIT Number of iterations increased untill 1000. This is the code I used with the equation that has physical meaning when interpreting the results of the coefficients: # tanh function definition: ftanh = function(x, x0, a, b, k) { (1/2) * a * (1 + (tanh(k*(x-x0)))) + b } # Fitting code using nonlinear least square: nlc <- nls.control(maxiter = 1000) fitmodel <- nls(y ~ ftanh(x, x0, a, b, k), control=nlc, start=list(x0 = 7, a = -29500, b = 17500, k = -0.032)) # Plotting fitted cumulative function options(scipen = 10) plot(x, predict(fitmodel), type="l", log = "x", col="blue", xlab = "x", ylab = "y") points(x, y, col = "red") legend("topleft", inset = .05, legend = c("exp","fit"), lty = c(NA,1), col = c("red", "blue"), pch = c(1,NA), lwd = 1, bty = "n") summary(fitmodel) This is the best fit I got using Excel just by guessing the initial values (orange line): I am assuming that my initial values are not the best, but I am in a constant loop and it seems like there is no way out. I am pretty sure that b value is okay, and that x0 and a are around my initial values, but k is actually determining the steepness. Any idea?
The problem is that your fit function does not describe your data. In the logarithmic plot it looks OK but is is actually more like a simple tanh. As the bending differs from tanh an even better model is of type a tanh(b*(x-c)**d)**(1/d) Not using r but simple python it looks like: import matplotlib matplotlib.use('Qt4Agg') from matplotlib import pyplot as plt import numpy as np from scipy.optimize import curve_fit def func1(x, a, b, c): return a*np.tanh(b*(x-c)) def func2(x, a, b, c,d): return a*np.tanh(b*np.fabs((x-c))**d)**(1/d) initialGuess1=[y[-1], 1, 0] initialGuess2=[y[-1], 1, 0,1] popt1,pcov1 = curve_fit(func1, x, y,initialGuess1) popt2,pcov2 = curve_fit(func2, x, y,initialGuess2) print popt1 print popt2 fittedData1=[func1(s, *popt1) for s in x] fittedData2=[func2(s, *popt2) for s in x] fig=plt.figure() ax=fig.add_subplot(1,1,1) ax.plot(x,y) ax.plot(x,fittedData1) ax.plot(x,fittedData2) ax.set_xscale('log') plt.show() >> [ 1.74207552e+04 3.53554258e-02 2.20477585e-01] >> [ 1.76893061e+04 1.90416542e-01 1.19819247e+00 5.59529032e-01] Data in blue, tanhfit in orange and modified fit function in green. Initial guesses are straight forward. (You could play around a bit to get rid of the kink near zero)
How to find the best possible solution? For-loop [r]
I have written this code: P<-4000000 #population j<-4 #exposures budget<-7000 #Euros vehicles<-data.frame(A1=c(2000001,1700000,1619200),A2=c(2500000,1900000,1781120),Price=c(2000,1500,1000)) #A1: Audience1, A2: Audience2 & Price-insertion end.i<-FALSE for(i in seq(4,1000,1)){ for(k in 1:nrow(vehicles)){ R1=vehicles$A1[k]/P;R2=vehicles$A2[k]/P shape1=((R1)*((R2)-(R1)))/(2*(R1)-(R1)*(R1)-(R2));shape1 shape2=(shape1*(1-(R1)))/(R1);shape2 t <- dbetabinom.ab(1:i, size = i, shape1 = shape1, shape2 = shape2) print(t[j]) print(paste(k,"vehicles",sep=" ")) print(paste(i,"insertions", sep=" ")) price<-i*vehicles$Price[k] print(paste(price,"Euros",sep=" ")) if((i*vehicles$Price[k])<=budget& t[j]>=0.024 & t[j]<=0.025){end.i<-TRUE;break;} }; if (end.i) break; } This code allows extracting the number of insertions (i) necessary to reach 'X individuals (t[j] probability x population) exposed j times' (my objective). However, the code ends when it reachs a solution. I would be interested in knowing how to program the code to estimate all the possible solutions, and choose one that would also allow to minimize the cost of the insertions (vehicles$Price[k] x i). Kind regards, Majesus
Try this. Just append the solutions to a data frame (called out_put in this case) P<-4000000 #population j<-4 #exposures budget<-7000 #Euros vehicles<-data.frame(A1=c(2000001,1700000,1619200),A2=c(2500000,1900000,1781120),Price=c(2000,1500,1000)) #A1: Audience1, A2: Audience2 & Price-insertion out_put = data.frame(TJ = NA,Vehicles = NA, Insertions = NA,Price_Euros = NA) for(i in seq(4,1000,1)){ for(k in 1:nrow(vehicles)){ R1=vehicles$A1[k]/P;R2=vehicles$A2[k]/P shape1=((R1)*((R2)-(R1)))/(2*(R1)-(R1)*(R1)-(R2)) shape2=(shape1*(1-(R1)))/(R1) t <- dbetabinom.ab(1:i, size = i, shape1 = shape1, shape2 = shape2) price<-i*vehicles$Price[k] out_put = rbind(out_put,c(t[j],k,i,price)) } } out_put = out_put[2:nrow(out_put),] rownames(out_put) = NULL
Adding subscripts to the variable names of a PCA using ggbiplot?
I have the following PCA plot with 7 variables (see data and code below), where I want the variable names to be put in subscript. In ggbiplot() however, the variable names are automatically taken from the column names of the matrix that was used to generate the PCA, and (as far as I know) no options are available to add these manually. Therefore I tried to create subscripts in my actual column names by using c(expression("j"["d"]),expression("k"["1"]), etc.) which only results in the variable names turning into "j"["d"],"k"["1"] on the PCA plot. Is there a workaround for this problem? e.g. making the second character smaller or something alike? The plot was generated using the data: Param.clean <- structure(c(0.314689287410068, 0.279479887056815, 0.448790689537864, 0.25336455455925, 0.289008161177184, 0.314501392595033, 0.291144087910652, 0.30630205659933, 0.283940162753961, 0.293902791758693, 0.384490609026053, 0.287376099118374, 0.308181312257512, 0.295516976083076, 0.299962079750977, 0.377418190053724, 0.577708482228635, 0.548861542714413, 0.445100820783724, 0.454234613160057, 0.509303280474031, 0.485557486397235, 0.512794671011103, 0.438809386918853, 0.584488774396788, 0.485077847448695, 0.54242611837146, 0.50295109738886, 0.462140343335828, 0.482811895512131, 0.505123975906175, 0.454883826310242, 0.270198900375524, 0.375171915727647, 0.415330703464691, 0.335520417496773, 0.337301727971001, 0.414448624199441, 0.413407199816623, 0.480251511263297, 0.381597639419929, 0.299997369191106, 0.716363262901133, 0.334190348030789, 0.339749957548872, 0.615860520668703, 0.399995858493781, 0.290916481482953, 0.271565709782391, 0.434971269297489, 0.426102875513371, 0.245620918873499, 0.350757895503111, 0.314711831388176, 0.233155192989713, 0.248289747469244, 0.260316266382216, 0.435133707574921, 0.270357707406285, 0.460714026041302, 0.300202262584418, 0.283894965208827, 0.286731230742906, 0.476076636930455, 0.496419713185873, 0.449716335449948, 0.414301742272173, 0.517741851053675, 0.452096411019313, 0.503619428840069, 0.46590684730812, 0.426164828533173, 0.526710272381684, 0.60162289738927, 0.501571299694807, 0.5204289094248, 0.501944294148778, 0.420989057029306, 0.486676941655541, 0.581232141136961, 0.388451077003248, 0.348575471498664, 0.541637601056563, 0.280529225927791, 0.474527715587717, 0.427368925204716, 0.247233045036043, 0.371205006512827, 0.350378420436755, 0.334934610173675, 0.672485054825788, 0.387370130421541, 0.442394016641109, 0.410245000087745, 0.554591956294395, 0.292541225836523, 4.53967830833669, 4.07671677879989, 6.31220323958745, 5.53951495559886, 6.14831664270411, 2.49250044245273, 3.56566691364472, 0.905669305473566, 5.65883946946512, 2.64297457644716, 3.05508165226008, 3.18054619676744, 6.40823390030613, 3.37302493648604, 3.66350222987433, 2.54057804516827, 8.20203100920965, 2.71440979468947, 2.91087136765321, 1.99383332931126, 2.54861955298111, 2.76731871856997, 2.8168199171933, 1.87471640761942, 2.36744814319536, 2.70068269921467, 3.73984078429639, 3.14727020682767, 2.44860090082511, 2.96811391366646, 3.15924824448302, 2.75038693333045, 0.571991651163747, 0.0795687369691844, 0.199285715352744, 0.278876264579594, 0.0878147967159748, 0.776516450569034, 0.109050695318729, 0.214585168287158, 0.0733157177455723, 4.99666969059035, 0.681611322797835, 0.511083496330927, 0.103351746220142, 2.09765716294448, 0.163525143420944, 1.15420421690991, 3.94337840843946, 3.16239102048179, 5.81127347030366, 5.75235136287908, 2.48392526193832, 2.46317023644224, 1.81044878205284, 4.65439113788307, 5.15721979085356, 2.87866174476221, 2.5224589696154, 5.64499958222732, 1.54218871717652, 2.67105548409745, 3.03890538634732, 4.12773523628712, 2.30713835917413, 1.77077499361088, 2.28220948716626, 2.27822186658159, 2.22687301691622, 2.78089357145751, 2.10296940756962, 1.62778628757223, 2.64038743038351, 2.90401477599517, 2.85171007970348, 2.15843657962978, 2.22618574043736, 2.01146884588525, 7.50444248911614, 2.78893498703837, 0.369707935024053, 0.640407053288072, 1.16690336726606, 1.19069673353806, 0.369720328599215, 0.222492094617337, 1.97003725056226, 0.0771822298566498, 0.0491951033473015, 1.58942595124245, 0.56345314020291, 3.61783248605207, 0.470429616980255, 4.25140980218227, 0.416233133369436, 0.838344213552773, 2.73752116598189, 3.02740207407624, 1.11222450388595, 2.30047973571345, 2.45276295114309, 2.64581680834914, 2.78265510452911, 3.27471463242546, 3.1145193031989, 2.56884276599934, 3.15895244479179, 3.14939826028422, 2.39397626441593, 3.8150685878781, 2.75754480964194, 2.56850058445707, 1.10134650183221, 1.90155507440989, 1.71837465837598, 2.29802527697757, 1.24960316416497, 1.95164571283385, 1.49695883272216, 2.51760663697496, 1.04954799870029, 1.59203378250822, 1.33138975808397, 1.30761714885011, 1.6880701482296, 1.33289409801364, 1.18721167324111, 2.10289117880166, 4.97532397741452, 4.08132408546905, 4.83296488539005, 5.65673472359776, 1.52374835970501, 4.90433675702661, 6.09970323707287, 4.9611738567551, 4.98475494328886, 1.58062443907062, 6.51368894614279, 5.82539446347704, 4.37618843046948, 6.41044923532754, 1.36502551613376, 2.11988553637639, 2.87185357650742, 1.99067048101375, 2.6186517810449, 1.56325603065391, 3.18718514405191, 2.67383103277534, 3.39795261013011, 3.97267814834292, 3.7929962793986, 2.75519806658849, 2.67046403462688, 1.61068025619412, 3.21088001991933, 2.72053461754695, 2.89008031133562, 2.44437138317153, 1.87622146913782, 2.30537068654473, 1.77740855213876, 1.46343538770452, 2.23820108221844, 1.83238286990672, 1.70535395620391, 3.20611382601783, 1.42552105011418, 1.35411406867206, 1.67505901074037, 1.27963638935859, 1.50879823369905, 3.20626547553887, 1.34457757696509, 1.4350421866402, 3.01776180580879, 4.42168406192213, 2.68915122840554, 5.10021819965914, 5.7995775481686, 3.69961343705654, 5.6582765411896, 5.42690238449723, 4.12574668414891, 2.88072699628149, 7.37651169135546, 0.877918794285506, 3.48383912583813, 7.16048748052369, 1.10681456684445, 2.0056554214408, 0.843951161950827, 0.892569730058312, 1.82299897540361, 1.4852886760508, 1.34192016645273, 1.12837524153292, 0.788718643598258, 2.59369957595567, 1.03540072683245, 0.767321502789855, 1.23622662722568, 0.784033099189401, 0.784212271682918, 1.25203002375116, 0.76296656858176, 0.985467154532671, -0.220396793447435, 0.106205735355616, 0.124459093059103, -0.00892141033460625, -0.10377890299509, 0.0926174888437004, -0.0549866305664182, 0.278899986296892, 0.0474233353460836, -0.109990653581917, 0.0474225463395319, 0.0338427349925041, 0.0972763542085886, 0.114185092970729, -0.00886052381247282, -0.0589170539751649, -2.3298938000525, -1.84932016064972, -3.90579685030132, -6.07330848347147, 1.8304963277777, -2.75582764982432, -4.77531149517745, -3.8228796642224, 1.27799427995086, -5.45959737020979, -2.00253919902196, -2.22745593055834, -2.6610222319141, -3.21496389806271, -6.01237997648368, -3.13309627585113, 0.733061715583007, 1.04009207207213, 1.51182846035312, 1.92732659168541, 1.29081471823156, 0.809032674878836, 0.954354595015446, 1.5407008677721, 0.961584224718311, 0.949504360179106, 1.17135864682496, 0.758904917165637, 1.27744460012764, 1.13802453503013, 1.12143621314317, 0.923086409457028, -0.207958693792422, -0.112425229889651, -0.114883695351581, -0.0418341891790419, 0.00953924376517534, 0.0761805102229118, 0.06189932115376, -0.279747098684311, -0.139795616269112, -0.0957655208185315, -0.211875131353736, 0.15934879556795, -0.307479116310674, -0.171517195557555, -0.147559982724488, -0.151702696457505, -3.2736393770054, -3.77255320500831, -2.50166923739016, -3.38403152301908, -3.54271008856346, -5.98730765748769, -3.46145537216216, 4.08535061942786, -5.5706409165586, -5.12871207815409, -2.00980313849697, -1.74987012389551, -4.99012113984178, -5.52220372986048, -4.09768380224705, -2.65192667357127, 0.368457175791264, 0.276677635120849, 0.660357913002372, 0.536901503801346, 0.122066596522927, 0.248441367586455, 0.326834246516228, 0.414462564513087, 0.374505277723074, 0.157977417111397, 0.147561579942703, 0.327407247386873, 0.481645831460754, 0.471423282288015, 0.402634991332889, 0.600018523255984, -0.754529740661383, -0.333761049988369, -0.479209786502022, -0.338527356651923, -1.15156446321805, -0.187009451910853, -1.59113974179576, -0.26058504227052, -0.629410240799189, -1.30694395600756, -0.916838761041562, -1.07011808082461, -1.22627768199891, -0.492068426683545, -1.54347744450718, -0.104520670138299, 1.40759190544486, 7.8479420303603, 2.75170721710225, 3.93423731307934, 9.85715725720922, 5.37083122879267, 6.15668724537641, 4.96914687916388, 6.46718368138125, 1.0871206430619, 9.84838488511741, 9.75057146977633, 1.26769720241924, 9.92010527290404, 9.98543933499604, 9.69677802640945, 0.169932479038835, 0.409494925844172, 0.409328970126808, 0.740250064991415, 0.193447070196271, 0.51206505260865, 0.250175041146576, 0.391306541860104, 0.295244073495269, 0.243191891349852, 0.293793072924018, 0.408511371351779, 0.281213674316803, 0.680068365474543, 0.41473192628473, 0.371123384684324, -0.753847653398911, -0.768953422084451, -1.10839967615902, -0.771105247549713, -0.155546843451758, -0.282887876386441, -0.444554830901325, -0.305730849504471, -0.499526713974774, -0.561585665126642, -0.731248073279858, -0.888600847683847, -0.92906893696636, -0.32135354558875, -0.635939710773528, -0.817948141487935, 1.6278464008073, 3.22130429296692, 3.22974945083757, 7.91888088977089, 9.00321571025501, 2.45285976212472, 6.25077115575721, 5.03100211266428, 2.74867731204381, 1.44042827261984, 5.0080717401579, 9.99481210485101, 1.47605382240812, 5.14414160776883, 7.90287723037352, 9.74082155153155, 6.49911883796255, 4.32981192308168, 8.23767292803774, 4.77091148030013, 9.32961360147844, 2.72199803938468, 3.16884732668598, 0.829324850315849, 5.05701699654261, 2.34405943658203, 3.72586945071816, 2.25735736116767, 6.09207524452358, 4.18884709620227, 3.34469041476647, 2.58207156453282, 0.749518116253117, 10.288818734698, 4.99554592402031, 12.6404861267656, 7.78458069656044, 5.22634824855874, 19.4536860734845, 18.1442198018854, 2.79630955830216, 9.58980514369905, 7.07662330872069, 2.31912315823138, 4.37504726642122, 10.6357821771254, 4.86855507971098, 15.2487045279394, 2.38136078696698, 2.2241358395045, 2.6578728514413, 2.00018415475885, 14.3105512278154, 2.79016453381628, 2.82581362407655, 3.00503022968769, 0.867751725018024, 19.840897029452, 2.76507987820854, 2.18780075665563, 2.29634886607528, 5.24806297849864, 3.00219499040395, 3.75070014856756, 4.70993515464167, 2.90138749877612, 7.88213442545384, 6.81599063475927, 2.61536476109177, 2.09377944457034, 1.96296699593464, 5.57947221212089, 5.20963124415527, 3.33875400945544, 2.79699660371989, 4.58355573223283, 1.3866287143901, 2.73741390556097, 3.83854200132191, 3.64578404258937, 8.6152262147516, 7.4471927308167, 10.7907397029921, 3.60064423537503, 2.21575071569532, 13.2584175148358, 6.69871457573026, 7.57425001679609, 10.597095658568, 6.29717063158751, 19.982005469501, 4.82507357889165, 12.0198037318264, 12.1128156222403, 0.971864601969719, 7.90290065680941, 2.69096855397026, 3.41408452807615, 3.34672867252181, 3.73752327635884, 2.59765107041846, 3.69969989638776, 6.49256678763777, 1.34200508563469, 2.58853476804991, 6.08448572133978, 2.86518771201372, 8.80958803463727, 3.21931545517097, 13.9356314451744, 3.31248219124973, 2.6213849833856, 6.81703055885931, 4.57180783512692, 0.800920105539262, 1.6915382258594, 1.97274463716894, 8.35091653894633, 4.07009290065616, 4.70143776244173, 3.73712390195578, 3.32298003757993, 2.70389301739633, 9.40504621323198, 5.22653986488779, 6.91535883117467, 4.01246708252778, 6.83368936007222, 5.52582112283756, 9.52527065730343, 5.19140504300594, 8.41044230709473, 6.70183763448149, 6.82530618272722, 9.10367484707385, 14.269079283004, 4.7895190725103, 6.59831102186193, 5.62791180796921, 6.17603897117078, 7.14836313854903, 5.96534776215752, 6.33691875052949, 4.8933652261893, 13.8731955783442, 17.7908931604276, 13.79737106661, 12.8477370319888, 1.87629146464169, 19.782149810344, 19.4288346171379, 18.9387338103106, 18.204667886657, 1.15545298295716, 19.7008843562255, 17.4563148757443, 14.7906976851945, 17.3621598140026, 1.16834398824722, 1.00026320200414, 15.0063681416214, 3.00477131232619, 5.1401701791212, 0.385864693671465, 4.36085817695906, 8.55562331421922, 5.70195167902857, 5.37442221703629, 4.73609448876232, 3.56490389804045, 5.62534291626265, 1.87125703754524, 4.91213823029151, 5.71994946518292, 5.81859005757918, 4.93084813430905, 8.53895935813586, 8.24653955462078, 5.77503573757907, 8.75251863257339, 6.42709499839693, 6.27165456948181, 6.44690599292517, 16.0425839032357, 5.03840921912342, 5.87823822697004, 4.41305622781316, 5.94650622780124, 5.56597112355133, 1.1121899643292, 5.33032094594091, 5.42635044082999, 6.6131685036545, 11.4281271025538, 6.12669843180726, 14.5658381014441, 18.4343010187149, 10.0486588804051, 19.8108604625488, 19.3252983829007, 9.68507033698261, 7.62796785042932, 14.9589012558262, 0.670023332349956, 11.1040308237076, 17.0357564882065, 1.06506975100686, 0.740390195945899), .Dim = c(96L, 7L), .Dimnames = list(NULL, c("jd", "k1", "k2", "b1", "b2", "p1", "p2"))) and code: library(ggbiplot) Param.pca <- prcomp(Param.clean,scale=TRUE) groups <- factor(c(rep("Cercis L",16),rep("Cornus L",16),rep("Ginkgo L",16),rep("Cercis R",16),rep("Cornus R",16),rep("Ginkgo R",16))) g <- ggbiplot(Param.pca, choices=c(1,2), obs.scale = 1, var.scale = 1, ellipse.prob=0.95, groups = groups, ellipse = TRUE, alpha=0, varname.size=6,labels.size = 10) g <- g + geom_point(aes(shape=groups,col=groups)) g <- g + theme(legend.direction = 'vertical', legend.position = 'right', axis.text=element_text(size=14),axis.title=element_text(size=14), legend.text=element_text(size=14),legend.title=element_text(size=14)) plot(g)
Following up on #RichardTelford's comment, you can get the code for ggbiplot by typing ggbiplot in your console. Then copy and paste this into a script file and assign it to a new name, say, my_ggbiplot. Then change the last if statement in the function from this: if (var.axes) { g <- g + geom_text(data = df.v, aes(label = varname, x = xvar, y = yvar, angle = angle, hjust = hjust), color = "darkred", size = varname.size) } to this: if (var.axes) { df.v$varname = paste0(substr(df.v$varname,1,1),"[",substr(df.v$varname,2,2),"]") g <- g + geom_text(data = df.v, aes(label = varname, x = xvar, y = yvar, angle = angle, hjust = hjust), color = "darkred", size = varname.size, parse=TRUE) } Note the addition of the line that creates the new text labels and then the addition of parse=TRUE to geom_text. This hard-codes the labels to work specifically for your case, but you can make the function more general if you're going to do this a lot. To run the function (once you've loaded it into your environment): my_ggbiplot(Param.pca, choices=c(1,2), obs.scale = 1, var.scale = 1, ellipse.prob=0.95, groups = groups, ellipse = TRUE, alpha=0, varname.size=6, labels.size = 10) + geom_point(aes(shape=groups, col=groups)) + theme(axis.text=element_text(size=14), axis.title=element_text(size=14), legend.text=element_text(size=14), legend.title=element_text(size=14)) And here's the result: