Ggplot2 এ facet_wrap এবং আইশের = "বিনামূল্যে" দিয়ে স্বতন্ত্র অক্ষ সীমা নির্ধারণ করা


115

আমি পূর্বাভাস বনাম প্রকৃত মূল্যবোধ পাশাপাশি বনাম অবশিষ্টাংশের প্লটের সাথে একটি পূর্বেযুক্ত প্লট তৈরি করছি। আমি shinyবিভিন্ন প্রশিক্ষণের পরামিতি ব্যবহার করে মডেলিংয়ের প্রচেষ্টাগুলির ফলাফলগুলি অন্বেষণে সহায়তা করতে ব্যবহার করব । আমি 85% ডেটা দিয়ে মডেলটিকে প্রশিক্ষণ দিই, বাকী 15% পরীক্ষা করে দেখি এবং 5 বার পুনরাবৃত্তি করে প্রতিবার আসল / পূর্বাভাসিত মান সংগ্রহ করি। অবশিষ্টাংশ গণনা করার পরে, আমার data.frameচেহারাটি এর মতো:

head(results)
       act     pred       resid
2 52.81000 52.86750 -0.05750133
3 44.46000 42.76825  1.69175252
4 54.58667 49.00482  5.58184181
5 36.23333 35.52386  0.70947731
6 53.22667 48.79429  4.43237981
7 41.72333 41.57504  0.14829173

আমি যা চাই:

  • predবনাম actএবং predবনাম এর পাশাপাশি প্লট ।resid
  • এক্স / y পর্যন্ত পরিসীমা / সীমা predবনাম actএকই, আদর্শভাবে থেকে হতে min(min(results$act), min(results$pred))থেকেmax(max(results$act), max(results$pred))
  • এক্স / y পর্যন্ত পরিসীমা / সীমা predবনাম resid না আমি কি প্রকৃত বনাম পূর্বাভাস চক্রান্ত করার জন্য কী দ্বারা প্রভাবিত হতে পারে। জন্য ষড়যন্ত্র xউপর শুধুমাত্র পূর্বাভাস মূল্যবোধ ও yওভার শুধুমাত্র অবশিষ্ট পরিসীমা জরিমানা।

পাশাপাশি উভয় প্লট দেখতে, আমি তথ্য গলে:

library(reshape2)
plot <- melt(results, id.vars = "pred")

এখন প্লট করুন:

library(ggplot2)
p <- ggplot(plot, aes(x = pred, y = value)) + geom_point(size = 2.5) + theme_bw()
p <- p + facet_wrap(~variable, scales = "free")

print(p)

এটি আমি যা চাই তার কাছাকাছি:

এখানে চিত্র বর্ণনা লিখুন

আমি কি চাই x এর জন্য হয় এবং প্রকৃত বনাম জন্য Y রেঞ্জ একই পূর্বাভাস, কিন্তু আমি নিশ্চিত যে নির্দিষ্ট করার কিভাবে নই, আর আমি না যে বনাম যেহেতু অবশিষ্ট চক্রান্ত পূর্বাভাস জন্য করা প্রয়োজন ব্যাপ্তি সম্পূর্ণ আলাদা।

আমি উভয়ের জন্য এই জাতীয় কিছু যুক্ত করার চেষ্টা করেছি scale_x_continousএবং scale_y_continuous:

min_xy <- min(min(plot$pred), min(plot$value))
max_xy <- max(max(plot$pred), max(plot$value))

p <- ggplot(plot, aes(x = pred, y = value)) + geom_point(size = 2.5) + theme_bw()
p <- p + facet_wrap(~variable, scales = "free")
p <- p + scale_x_continuous(limits = c(min_xy, max_xy))
p <- p + scale_y_continuous(limits = c(min_xy, max_xy))

print(p)

তবে min()এটি অবশিষ্টাংশের মান তুলে ধরে ।

এখানে চিত্র বর্ণনা লিখুন

আমার একটি সর্বশেষ ধারণা ছিল গলানোর আগে সর্বনিম্ন actএবং predভেরিয়েবলের মান সংরক্ষণ করা এবং তারপরে কোন দিকটি প্রদর্শিত হয় তা নির্দেশ করার জন্য সেগুলি গলিত ডেটা ফ্রেমে যুক্ত করুন:

head(results)
       act     pred       resid
2 52.81000 52.86750 -0.05750133
3 44.46000 42.76825  1.69175252
4 54.58667 49.00482  5.58184181
5 36.23333 35.52386  0.70947731

min_xy <- min(min(results$act), min(results$pred))
max_xy <- max(max(results$act), max(results$pred))

plot <- melt(results, id.vars = "pred")

plot <- rbind(plot, data.frame(pred = c(min_xy, max_xy),
  variable = c("act", "act"), value = c(max_xy, min_xy)))

p <- ggplot(plot, aes(x = pred, y = value)) + geom_point(size = 2.5) + theme_bw()
p <- p + facet_wrap(~variable, scales = "free")

print(p)

পয়েন্টগুলিও প্রদর্শন করে ব্যতিক্রম বাদে আমি যা চাই তা তা করে:

এখানে চিত্র বর্ণনা লিখুন

এরকম কিছু করার জন্য কোনও পরামর্শ?


আমি এই ধারণাটি যুক্ত করতে দেখেছি geom_blank(), তবে কীভাবে aes()বিটটি নির্দিষ্ট করতে হবে এবং এটি সঠিকভাবে কাজ করবে বা geom_point()হিস্টগ্রামের ব্যবহারের সমতুল্য কী তা আমি নিশ্চিত নই aes(y = max(..count..))


এখানে খেলার জন্য ডেটা রয়েছে (আমার আসল, পূর্বাভাস দেওয়া এবং গলানোর আগে অবশিষ্টাংশগুলি):

> dput(results)
structure(list(act = c(52.81, 44.46, 54.5866666666667, 36.2333333333333, 
53.2266666666667, 41.7233333333333, 35.2966666666667, 30.6833333333333, 
39.25, 35.8866666666667, 25.1, 29.0466666666667, 23.2766666666667, 
56.3866666666667, 42.92, 41.57, 27.92, 23.16, 38.0166666666667, 
61.8966666666667, 37.41, 41.6333333333333, 35.9466666666667, 
48.9933333333333, 30.5666666666667, 32.08, 40.3633333333333, 
53.2266666666667, 64.6066666666667, 38.5366666666667, 41.7233333333333, 
25.78, 33.4066666666667, 27.8033333333333, 39.3266666666667, 
48.9933333333333, 25.2433333333333, 32.67, 55.17, 42.92, 54.5866666666667, 
23.16, 64.6066666666667, 40.7966666666667, 39.0166666666667, 
41.6333333333333, 35.8866666666667, 25.1, 23.2766666666667, 44.46, 
34.2166666666667, 40.8033333333333, 24.5766666666667, 35.73, 
61.8966666666667, 62.1833333333333, 74.6466666666667, 39.4366666666667, 
36.6, 27.1333333333333), pred = c(52.8675013282404, 42.7682474758679, 
49.0048248585123, 35.5238560262515, 48.7942868566949, 41.5750416040131, 
33.9548164913007, 29.9787449128663, 37.6443975781139, 36.7196211666685, 
27.6043278172077, 27.0615724310721, 31.2073056885252, 55.0886903524179, 
43.0895814712768, 43.0895814712768, 32.3549865881578, 26.2428426737583, 
36.6926037128343, 56.7987490221996, 45.0370788180147, 41.8231642271826, 
38.3297859332601, 49.5343916620086, 30.8535641206809, 29.0117492750411, 
36.9767968381391, 49.0826677983065, 54.4678549541069, 35.5059204731218, 
41.5333417555995, 27.6069075391361, 31.2404889715121, 27.8920960978598, 
37.8505531149324, 49.2616631533957, 30.366837650159, 31.1623492639066, 
55.0456078770405, 42.772538591063, 49.2419293590535, 26.1963523976241, 
54.4080781796616, 44.9796700541254, 34.6996927469131, 41.6227713664027, 
36.8449646519306, 27.5318686661673, 31.6641793552795, 42.8198894266632, 
40.5769177148146, 40.5769177148146, 29.3807781312816, 36.8579132935989, 
55.5617033901752, 55.8097119335638, 55.1041728261666, 43.6094641699075, 
37.0674887276681, 27.3876960746536), resid = c(-0.0575013282403773, 
1.69175252413213, 5.58184180815435, 0.709477307081826, 4.43237980997177, 
0.148291729320228, 1.34185017536599, 0.704588420467079, 1.60560242188613, 
-0.832954500001826, -2.50432781720766, 1.98509423559461, -7.93063902185855, 
1.29797631424874, -0.169581471276786, -1.51958147127679, -4.43498658815778, 
-3.08284267375831, 1.32406295383237, 5.09791764446704, -7.62707881801468, 
-0.189830893849219, -2.38311926659339, -0.541058328675241, -0.286897454014273, 
3.06825072495888, 3.38653649519422, 4.14399886836018, 10.1388117125598, 
3.03074619354486, 0.189991577733821, -1.82690753913609, 2.16617769515461, 
-0.088762764526507, 1.47611355173427, -0.268329820062384, -5.12350431682565, 
1.5076507360934, 0.124392122959534, 0.147461408936991, 5.34473730761318, 
-3.03635239762411, 10.1985884870051, -4.18300338745873, 4.31697391975358, 
0.0105619669306023, -0.958297985263961, -2.43186866616734, -8.38751268861282, 
1.64011057333683, -6.36025104814794, 0.226415618518729, -4.80411146461488, 
-1.1279132935989, 6.33496327649151, 6.37362139976954, 19.5424938405001, 
-4.17279750324084, -0.467488727668119, -0.254362741320246)), .Names = c("act", 
"pred", "resid"), row.names = c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L, 11L, 12L, 13L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 
24L, 25L, 26L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 
38L, 39L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L, 
52L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L
), class = "data.frame")

শুধু কৌতূহলী - কেন একই গ্রাফে প্রকৃত এবং অবশিষ্টাংশ প্লট করবেন না?
রিকার্ডো সাপোর্টা

2
আমি প্লটগুলি আলাদাভাবে তৈরি করব এবং তারপরে ব্যবহার করব grid.arrange
জোরান

@ রিকার্ডো সাপোর্টা এমন কোনও গুগল চিত্র রয়েছে যা আপনি উদাহরণ হিসাবে লিঙ্ক করতে পারেন? আপনি কি ggplot(plot, aes(x = pred, y = value)) + geom_point()গলনা -পরবর্তী তথ্য ব্যবহার করে পরামর্শ দিচ্ছেন যে আমি কোনও মুখোমুখি না হয়ে থাকি? অ-র্যান্ডমনেস / স্কিউ সনাক্তকরণে এটি কী কঠিনভাবে অবশিষ্টাংশের স্কেলকে সঙ্কুচিত করবে না?
হেন্ডি

1
আমার অন্যান্য মন্তব্য facetting হয় হয় কম কোড ... আমি শুধু গলে, তারপর দ্বারা প্লটে বিভক্ত এবং পল ছিল variableদ্বারা নির্মিত মান melt()। তারপরে আবার, আমি মনে করি আমি lapplyবিভিন্ন সংমিশ্রণ প্লট করার জন্য তৈরি একটি তালিকায় এগুলি সংরক্ষণ করতে পারি । ইনপুট জন্য ধন্যবাদ। আপনি যদি কোনও gridসমাধান তৈরি করতে চান তবে আমি উত্তরটি গ্রহণ করতে পারি, যদিও আমরা যদি সেই gridপথটিই গ্রহণ করি তবে এটি অন্যান্য ভিত্তিক সমাধানগুলির একটি নকলও হতে পারে।
হেন্ডি

1
@ জোড়ান এবং আমি খুঁজে পেয়েছি যে আমি নিয়মিতভাবে লোকদের এমন ব্যবহার না করার পরামর্শ দিচ্ছি grid.arrangeযা প্রায় অলসভাবে লেআউটটি গণ্ডগোল করে দেয়। আমি আশা করি gtable এর দীর্ঘকালীন বাগগুলি সম্বোধন করা হয়েছে।
ব্যাপটিস্ট

উত্তর:


115

একটি ডামি geom_blankস্তর সহ এখানে কিছু কোড রয়েছে ,

range_act <- range(range(results$act), range(results$pred))

d <- reshape2::melt(results, id.vars = "pred")

dummy <- data.frame(pred = range_act, value = range_act,
                    variable = "act", stringsAsFactors=FALSE)

ggplot(d, aes(x = pred, y = value)) +
  facet_wrap(~variable, scales = "free") +
  geom_point(size = 2.5) + 
  geom_blank(data=dummy) + 
  theme_bw()

এখানে চিত্র বর্ণনা লিখুন


11
এটির জন্য একটি দুর্দান্ত বৈকল্পিক expand_limits(pred=range_act, value=range_act)যা ব্যবহার করে geom_blankতবে ব্যবহার করা সহজ।
Eregon

6
এটি কেবল সীমাটি প্রসারিত করে (তবে এটি চুক্তি করে না) সীমাটি ছোট করার কোনও উপায় আছে কি? @ ব্যাপটিস্টে
ইন্দ্রনীল গায়েন

32

আমি নিশ্চিত যে আপনি যা চান তা আমি বুঝতে পেরেছি, তবে যা আমি বুঝতে পেরেছি তার ভিত্তিতে

x স্কেলটি একরকম বলে মনে হচ্ছে, এটি y স্কেল যা একই নয় এবং এটি কারণ আপনি আঁশগুলিকে নির্দিষ্ট করেছেন = "মুক্ত"

কেবলমাত্র x কে মুক্ত থাকার জন্য আপনি স্কেলগুলি "" ফ্রি_এক্স "নির্দিষ্ট করতে পারেন (এক্ষেত্রে এটি পূর্বের মতো একইরূপের সংজ্ঞা অনুসারে একই রেঞ্জ রয়েছে)

p <- ggplot(plot, aes(x = pred, y = value)) + geom_point(size = 2.5) + theme_bw()
p <- p + facet_wrap(~variable, scales = "free_x")

আমার জন্য কাজ, ছবি দেখুন

এখানে চিত্র বর্ণনা লিখুন

আমি মনে করি আপনি এটি খুব কঠিন করে তুলেছিলেন - আমি মনে করি মনে হয় এক সময় নূন্যতম এবং সর্বাধিকের সাথে সূত্রের উপর ভিত্তি করে সীমা নির্ধারণ করা হয়েছিল এবং যদি আমি মনে করি যে এটি কেবলমাত্র এই মানগুলি ব্যবহার করেছে তবে আমি কোডটি খুঁজে পাই না


7

আপনি যে y-axis রেঞ্জটি চান তা সেট করতেও কোর্ড_কার্টেসিয়ান কমান্ডের সাথে রেঞ্জটি নির্দিষ্ট করতে পারেন, আগের পোস্টের মতো স্কেল = ফ্রি_এক্স ব্যবহার করুন

p <- ggplot(plot, aes(x = pred, y = value)) +
     geom_point(size = 2.5) +
     theme_bw()+
     coord_cartesian(ylim = c(-20, 80))
p <- p + facet_wrap(~variable, scales = "free_x")
p

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.