שְׁאֵלָה:
צייר מספר עלילות על גרף אחד ב- R?
samarasa
2011-08-20 01:46:46 UTC
view on stackexchange narkive permalink

באמצעות הקוד הבא, ניסיתי לצייר ארבע עלילות על גרף ב- R . אני לא מרוצה מהדמות מכיוון שיש הרבה מקום בין החלקות, לכן רוחב החלקות אינו מספיק בכדי לנתח את העלילות.

  1. מישהו יכול לעזור לי לייצר גרף נחמד בעל ארבע עלילות?

  2. כיצד אוכל לשמור על תוויות ציר ה- x מ -1 עד 10 במקום 5 התוויות המוגדרות כברירת מחדל?

נתונים :

a1: 11.013 13.814 13.831 13.714 13.787 13.734 13.778 13.771 13.823 13.659

a2: 5.181 7.747 8.314 8.061 7.920 8.153 8.540 8.845 7.881 8.301

השתמשתי בנתוני a1 עבור b1, c1 ו- d1; נתוני a2 עבור b2, c2 ו- d2 רק כאן.

תמונה :

enter image description here

קוד :

  op = par (mfrow = c (4,1) , mar = c (5.5,5.1,4.1,2.1)) עלילה (a1, type = "b", ylim = c (0,14.5), xlab = "זמן (שניות)", ylab = "", cex.axis = 1.4, cex.lab = 1.3, cex = 1.2, lwd = 2.5, col = "red1", lty = 2, pch = 1, main = "A") שורות (a2, סוג = "b", pch = 3 , lty = 3, col = "darkblue", lwd = 2.5, cex = 1.2) par (xpd = T) legend (1,26.5, c ("X", "Y"), bty = "n", horizon = T, cex = 1.5, col = c ("red1", "darkblue"), text.col = c ("red1", "darkblue"), pch = c (1,3), lty = c (2,3 ), x.intersp = 0.4, adj = 0.2) עלילה (b1, סוג = "b", ylim = c (0,14.5), xlab = "זמן (שניות)", ylab = "", cex.axis = 1.4 , cex.lab = 1.3, cex = 1.2, lwd = 2.5, col = "red1", lty = 2, pch = 1, main = "B") שורות (b2, type = "b", pch = 3, lty = 3, col = "כהה כחול", lwd = 2.5, cex = 1.2) עלילה (c1, סוג = "b", ylim = c (0,14.5), xlab = "זמן (שניות)", ylab = "", cex.axis = 1.4, cex.lab = 1.3, cex = 1.2, lwd = 2.5, col = "red1", lty = 2, pch = 1, main = "C") שורות (c2, type = "b", pch = 3, lty = 3, col = "darkblue", lwd = 2.5, cex = 1.2) עלילה (d1 / 1000, type = "b", ylim = c (0,14.5), xlab = "זמן (שניות) ", ylab = "", cex.axis = 1.4, cex.lab = 1.3, cex = 1.2, lwd = 2.5, col = "red1", lty = 2, pch = 1, main = "D") שורות (d2, type = " b ", pch = 3, lty = 3, col =" darkblue ", lwd = 2.5, cex = 1.2) > mtext (" Price ", side = 2, at = 100, line = 3, cex = 1.1)  קוד> 
האם תוכל בבקשה למסור את פרטי הנתונים שלך? אולי, שים (data_from_r)
@suncoolsu, עדכנתי את השאלה במדגם נתונים. תודה.
מה אם היו לך 2 צבעים ו -4 סוגי קווים על אותם צירים עם אגדה? ברצוני לראות את הקוד והתוצאות לכך.
@user87: מכיוון ש -4 מגרשים הם מ -4 ניסויים שונים. לכן אני חושב שעדיף לצייר 4 עלילות לניתוח התוצאות מהניסויים.
@user87, אני לא בטוח למה אתה מתכוון. אולי אם היית פותח בשאלה חדשה מישהו יענה עליה (הייתי עונה :))
@kkp האם אין לשאול שאלה זו ב- Stack Overflow? זה בערך R לא סטטיסטיקה.
ארבע תשובות:
John
2011-08-20 07:07:55 UTC
view on stackexchange narkive permalink

אם ברצונך להיצמד למשהו כמו השיטה בה השתמשת, ייתכן שתרצה ללמוד את הפקודה layout (). עוד כמה שינויים בפירוט ותוכלו לקרב את הגרפים הרבה יותר זה לזה. אתה יכול גם להכניס את הדברים הייחודיים המשתנים בין גרפים לרשימה (כמו הנתונים והשוליים) ואז לעבור לולאה. כמו כן, יציין כי הכנתי את הציר התחתון עם הפקודה ישירה () כדי שתוכל לשלוט לאן הפריטים הולכים.

פריסת

theplot

עלי לציין שממש לא התאמצתי לעשות את זה נחמד ככל יכולתי ובמקום להכין את גרף הדמה הראשון הזה יכולתי פשוט להגדיר מספיק מקום במסגרת הראשונה. למרבה הצער ההגדרה mar () מנסה למלא את המסגרת והשוליים העליונים משפיעים על המרחק שהתווית מעל הגרף איננה ולכן אצטרך ללכת ולהכין את כל התוויות שלי עם mtext () או טקסט () במקום להשתמש רק התפאורה העיקרית בתוך העלילה ולא התחשק לי לעשות זאת

השני +1 לגרפיקה בסיסית של badass. ניסיתי לשווא לכתוב משהו נחמד עם הפקודה layout (). אני אחזור לכאן בפעם הבאה שאצטרך להשתמש בזה.
Wayne
2011-08-20 02:18:36 UTC
view on stackexchange narkive permalink

הייתי ממליץ ללמוד את חבילת הגרפיקה של הסריג. אני יכול להתקרב למה שאתה רוצה בכמה שורות. ראשית, ארוז את הנתונים שלך במסגרת נתונים, משהו כזה:

  dat <- data.frame (x = rep (1:10, 8), y = c (a1, a2 , b1, b2, c1, c2, d1, d2), var = factor (rep (c ("X", "Y"), כל אחד = 10)), גרף = factor (rep (c ("A", ") B "," C "," D "), כל אחד = 20)))  

שמניב:

  xy var graph1 1 0.556372979 X A2 2 0.754257646 X A3 3 0.815432905 X A4 4 0.559513013 X A5 5 0.763368168 X A6 6 0.426415259 X A7 7 0.597962532 X A8 8 0.723780143 X A9 9 0.228920116 X A10 10 0.607378894 X A11 1 0.865114425 Y A14 219 A09 A15 5 0.620425977 Y A16 6 0.703170299 Y A17 7 0.174297656 Y A18 8 0.698144659 Y A19 9 0.732527016 Y A20 10 0.778057398 Y A21 1 0.355583032 X B22 2 0.015765144 X B23 3 0.315004753 X B24 4 0.25235 6324279 X B26 6 0.028634427 X B27 7 0.475360443 X B28 8 0.577119754 X B29 9 0.709063777 X B30 10 0.308695235 X B31 1 0.852567748 Y B32 2 0.938889121 Y B33 3 0.080869739 Y B34 4 0.732318482 Y6 B36 0.3256 B38 8 0.990504039 Y B39 9 0.331377188 Y B40 10 0.448251682 Y B41 1 0.967255983 X C42 2 0.722894624 X C43 3 0.039523960 X C44 4 0.003774719 X C45 5 0.218605160 X C46 6 0.722304874 X C47 7 0.576140686 X 0.28 C48 8 0.739656846 X C51 1 0.528278201 Y C52 2 0.104415716 Y C53 3 0.966076056 Y C54 4 0.504415150 Y C55 5 0.655384900 Y C56 6 0.247340395 Y C57 7 0.193857228 YC
58 8 0.019133583 Y C59 9 0.799404908 Y C60 10 0.159209090 Y C61 1 0.422574508 X D62 2 0.823192614 X D63 3 0.808715876 X D64 4 0.770499188 X D65 5 0.049138399 X D66 6 0.747017767 X D67 7 0.239916970 X D68 8 0.937605577 X D71 1 0.850112019 Y D72 2 0.675407232 Y D73 3 0.273276166 Y D74 4 0.455995477 Y D75 5 0.695497498 Y D76 6 0.688414035 Y D77 7 0.454013633 Y D78 8 0.874853452 Y D79 9 0.568746031 Y xyplot של הסריג :
  הספרייה (סריג) xyplot (y ~ x | גרף, קבוצות = var, נתונים = dat, סוג = "o", פריסה = c (1, 4), as.table = T, xlab = "Time (secs)", ylab = "Price")  

שמניב גרף יפה כמו:

enter image description here

עריכה :

אם אתה רוצה שיהיו לך סמלים וקווים שונים ושיופיעו באגדה שלך, זה מסתבך, כי יו u פשוט בנה את האגדה בעצמך, ועליך לדעת כיצד להשיג את צבעי הסריג המוגדרים כברירת מחדל אם לא עקפת אותם בעצמך:

  my.text <- levels (dat $ var) my .lty <- c (2, 3) my.pch <- c (1, 2) my.col <- trellis.par.get ("superpose.symbol") $ col [1: 2] xyplot (y ~ x | גרף, קבוצות = var, נתונים = dat, סוג = "o", pch = my.pch, lty = my.lty, main = "כותרת ראשית", פריסה = c (1, 4), כמו.טבלה = T, xlab = "זמן (שניות)", ylab = "מחיר", מפתח = רשימה (עמודות = 2, טקסט = רשימה (my.text), נקודות = רשימה (pch = my.pch, col = my.col))) 

enter image description here

עריכה 2:

אתה יכול לפשט את הקוד ואת הגרף, אם שתי הקטגוריות באמת פשוטות כמו " X "ו-" Y ":

  xyplot (y ~ x | גרף, קבוצות = var, נתונים = dat, סוג =" o ", pch = c (" X "," Y " ), cex = 1.25, lty = c (2, 3), פריסה = c (1, 4), כמו. שולחן = T, xlab = "זמן (שניות)", ylab = "מחיר")  

אשר ישתמשו בסימני הנקודה "X" ו- "Y". אינך זקוק לאגדה כלל, ואז תוכל להקדיש מקום רב יותר לגרפים עצמם. (מצד שני, אולי לא תמצא חן בעיניך המראה, או שיהיה לך קשה יותר לקבוע את מרכז הנקודה המדויק, אם כי זה לא כל כך בעיה כמו שזה יכול להיות מכיוון שהקו עובר כל נקודה.)

עריכה 3:

למעשה, עליך להוסיף רצועה = F, strip.left = T, לעלילה, כדי לשים את A, B, C, D, תוויות משמאל לתרשימים, מה שנותן לך יותר מקום בגרף ארוך כזה:

  xyplot (y ~ x | גרף, קבוצות = var, data = dat, type = "o", pch = my.pch, lty = my.lty, main = "כותרת ראשית", פריסה = c (1, 4), כמו.טבלה = T, xlab = "זמן (שניות)", ylab = " מחיר ", strip.left = T, strip = F, key = list (עמודות = 2, text = list (my.text), נקודות = רשימה (pch = my.pch, col = my.col), קווים = רשימה (lty = my.lty, col = my.col)))  

enter image description here

@Wayne: אני מנסה לשמור אגדה בראש הגרף באמצעות auto.key עם space = "top", pch = c (1,2), lty = c (2,4) ארגומנטים, אך ערכי pch וערכי lty לא עובדים. יתר על כן, ברצוני לשמור על ה- X וה- Y כאופקיים באגדה. אתה יכול בבקשה לעזור לי בשביל זה.
כן. אני צריך להשתמש בערכי pch שונים כדי להפריד בין X ו- Y על גבי נייר. אני יכול להשתמש בערכי pch שונים בעלילה על ידי הוספת הארגומנט pch (1,4) ל- xyplot, אך הוא אינו משקף אגדה. אנא יידע אותי כיצד אוכל להשתמש בערכי pch שונים עבור X ו- Y במקרא.
בסדר, הבנתי את זה ברגע שחזרתי הביתה והתייעצתי עם הספר. בדוק את הגרסה הערוכה.
אין בעיה. אני חושב ש- EDIT 3 שלי נותן לך את הגרף הטוב ביותר הדומה למצב המקורי שלך (אך נראה טוב יותר ועם יותר שטח גרף מאשר). לא הזזתי את האגדה שלדעתי היא די פשוטה. אם אתה רוצה שהקו יעבור את הנקודה באגדה, אני חושב שתצטרך לקחת את זה לרמת המורכבות הבאה ולעשות דברים של draw.key שיוצרים grobs מותאמים אישית (דבר 'רשת': סריג ו- ggplot2 build ברשת).
כן, עכשיו הגרף טוב יותר. עם זאת, זה יהיה ממש טוב אם נקבל את הנקודה באגדה כמו שאנחנו מקבלים עם פונקציית עלילה רגילה.
למען האמת, הייתי משאיר את השורות מחוץ לאגדה לחלוטין. (הכנסתי אותם כדי להראות שזה אפשרי.) הנקודות מספיק ייחודיות כדי שלא אוכל לראות שום בלבול כשמסתכלים על הגרף. אני חושב שהצופים יאספו את שני סגנונות השורה כמעט באופן מיידי, על סמך הסמלים, ללא שום תיעוד נוסף.
joran
2011-08-20 04:47:48 UTC
view on stackexchange narkive permalink

הנה גרסה לפתרון ggplot2 של @ ברנדון המשלבת את התנהגות האגדה הרצויה:

  dat <- data.frame (x = rep (1:10, 8), y = runif (80), var = factor (rep (c ("X", "Y"), כל אחד = 10)), גרף = factor (rep (c ("A", "B", " C "," D "), כל אחד = 20))) ggplot (נתונים = dat, aes (x = x, y = y)) + facet_wrap (~ גרף, nrow = 4) + geom_point (aes (צורה = var) ) + geom_line (aes (color = var, group = var)) + מעבדות (x = NULL, y = NULL, צורה = "", color = "") + theme_bw () + optts (legend.position = "top" , legend.direction = "אופקי")  

enter image description here

אני מוצא אגדות הרבה יותר קלות ב ggplot2 , אבל ב- YMMV.

EDIT / p>

מתייחס למספר שאלות בתגובות. כדי לציין סוגי נקודה או קו מסוימים, תשתמש ב scale_aesthetic_manual כאשר אסתטי הוא או צורה , סוג קו וכו '. לדוגמא:

  ggplot (data = dat, aes (x = x, y = y)) + facet_wrap (~ גרף, nrow = 4) + geom_point (aes (צורה = var))) + geom_line (aes (color = var, linetype = var, group = var)) + מעבדות (x = NULL, y = NULL, צורה = "", color = "", linetype = "") + scale_shape_manual (ערכים = 4 : 5) + theme_bw () + opts (legend.position = "top", legend.direction = "horizontal")  

שינוי גודל תוויות הציר השונות נעשה על ידי שינוי הגדרות ב הנושא, בדרך כלל באמצעות opts () . לדוגמא:

  ggplot (data = dat, aes (x = x, y = y)) + facet_wrap (~ גרף, nrow = 4) + geom_point (aes (צורה = var))) + geom_line (aes (color = var, linetype = var, group = var)) + מעבדות (x = "X תווית", y = "Y תווית", צורה = "", color = "", linetype = "") + theme_bw () + optts (legend.position = "top", legend.direction = "horizontal", axis.text.x = theme_text (size = 15), axis.title.y = theme_text (size = 25, angle = 90))  

כדאי מאוד לצלול לאתר ולספרו למידע נוסף.

לעתים קרובות אני מעדיף את ggplot2. למעשה ניסיתי במהירות עם ggplot2 כאשר הסריג נעשה מורכב מדי, וגיליתי שלא ממש הצלחתי לגרום לאגדה לשקף כראוי את סגנונות הנקודה / קו אם הייתי רוצה לבחור צורות וסגנונות קו באופן מפורש. כנראה שעשיתי את זה בצורה לא נכונה, והוא הצליח לעבוד בגרף, אבל הטעיתי את יצירת האגדה של ggplot. האם אתה יכול לראות אם זה עובד בשבילך ולפרסם את הקוד?
@Joran: ניסיתי להבין כדי לשנות את שורות הסוגים והמצבעים ואת הצבעים, אך לא הצלחתי. האם תוכל להודיע ​​לנו כיצד נוכל לשנות את סוגי השורות וכו '. אנא אנא יידע אותנו כיצד נוכל להגדיל את גודל המעבדות x ו- y.
כרגע אני בטלפון שלי; אם @Brandon לא עורך את תשובתו לפני שאגיע הביתה עם מה שאתה מחפש, אגיע אליו בהמשך הערב.
Brandon Bertelsen
2011-08-20 02:33:43 UTC
view on stackexchange narkive permalink

בדומה לתשובתו של וויין, הייתי משתמש גם בחבילה אחרת, כלומר ggplot2

  ספרייה (ggplot2) df <- data.frame (parameter = runif (300), זמן = 1: 300, פיצול = מדגם (c (1: 4), 300, החלף = T), split2 = מדגם (c (1: 2), 300, החלף = T)) ggplot (df , aes (Time, parameter, color = as.factor (split2))) + geom_line () + facet_wrap (~ split, nrow = 4)  

מה שנותן לנו תרשים כמו:

enter image description here

אני אוהב את הרשתות ב- ggplot, אך האם יש דרך לכבות את הרקע האפור בהיר?
`+ בוחר (panel.background = theme_blank ())`
אם ברצונך לבצע שינויים אחרים, תוכל להקליד 'theme_get ()' כדי לראות מה אתה יכול לשנות. לאחר מכן עקוב אחר אותו דפוס כמו ההערה האחרונה שלי, והגדר אותם `= theme_blank ()`
התכוונתי לעשות ggplot2 בעצמי, אבל חשבתי שאולי סריג יהיה צעד קל יותר. כל אחד מהם מספק דרך מובנית לערום גרפים כאלה. לצבוט הרבה פרטים עלול להיות קשה, אבל קל להשיג משהו מושך וקריא במהירות. (אם כי אתה צריך לעטוף את הראש וליצור את מסגרת הנתונים הנכונה שממנה ניתן לגרף את הנתונים, במקום פשוט לזרוק דברים לגרף.
גיליתי שהדלי סיפק כלי מניפולציה של נתונים בחבילות האחרות שלו לצורך עיסוי הנתונים בצורה הנכונה. אם יש לך ספק התשובה היא בדרך כלל, "נמס ()"


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...