代码拉取完成,页面将自动刷新
同步操作将从 程序员维C社区/graph 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google Analytics + OutboundLink + Google Adsense -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-79254642-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-79254642-1');
</script>
<script>
var getOutboundLink = function(url) {
gtag('event', 'click', {
'event_category': 'outbound',
'event_label': url,
'transport_type': 'beacon',
'event_callback': function(){document.location = url;}
});
}
</script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-3523953066677938",
enable_page_level_ads: true
});
</script>
<!-- Google Analytics + OutboundLink + Google Adsense -->
<meta charset="utf-8">
<title>Add labels to circular barplot – the R Graph Gallery</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="This post explains how to add labels on a circular barchart, on top of each bar. It uses R and ggplot2, and reproducible code is provided.">
<meta name="keywords" content="R,ggplot2,tidyverse,Example,Data,Dataviz,Datavisualization,Plot,Chart,Graph,Learning,Caveat,Pitfall,Mistake">
<meta name="author" content="Yan Holtz">
<link rel="icon" href="img/logo/R_single_small.png">
<!-- Control appearance when shared by social media -->
<meta property="og:title" content="Add labels to circular barplot" />
<meta property="og:image" content="img/overview_RGG.png" />
<meta property="og:description" content="This post explains how to add labels on a circular barchart, on top of each bar. It uses R and ggplot2, and reproducible code is provided." />
<meta property='og:url' content="https://www.r-graph-gallery.com/296-add-labels-to-circular-barplot.html" />
<meta property="og:type" content="website" />
<!-- Bootstrap core CSS -->
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom fonts for this template -->
<link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<!-- Custom styles for this template -->
<link href="css/agency.css" rel="stylesheet">
<!-- JQUERY -->
<script src="vendor/jquery/jquery.min.js"></script>
</head>
<body data-spy="scroll" data-target="#myScrollspy" data-offset="1">
<!-- THIS ALLOWS TO INSERT THE MENU THAT IS STORED IN A MENU.HTML FILE-->
<nav class="navbar navbar-expand-lg fixed-top" id="mainNav"></nav>
<script>
$(function(){
$("#mainNav").load("html_chunk/menu.html");
});
</script>
<!-- THIS ALLOWS TO INSERT THE MODAL OF THE MENU THAT IS STORED IN A MENU_MODAL.HTML FILE-->
<div id="modal_menu_insertion"> </div>
<script>
$(function(){
$("#modal_menu_insertion").load("html_chunk/menu_modal.html");
});
</script>
<!-- Header = Title in big + social media Icon + quick description -->
<header class="masthead" style="padding-bottom: 30px;">
<div class="textlanding">
<center><h1>Add labels to circular barplot</h1></center>
<hr class="short_hr">
<br>
<ul class="list-inline social-buttons">
<li class="list-inline-item">
<a href="https://twitter.com/R_Graph_Gallery">
<i class="fa fa-twitter"></i>
</a>
</li>
<li class="list-inline-item social-buttons">
<a href="https://github.com/holtzy">
<i class="fa fa-github" style="color: white"></i>
</a>
</li>
<li class="list-inline-item social-buttons">
<a href="https://www.linkedin.com/in/yan-holtz-2477534a/">
<i class="fa fa-linkedin"></i>
</a>
</li>
<li class="list-inline-item social-buttons">
<a href="https://www.yan-holtz.com">
<i class="fa fa-home"></i>
</a>
</li>
</ul>
<center><p style="max-width: 600px; margin-top: 40px">This post explains how to add labels on a <a href="ggplot2-package.html">ggplot2</a> circular barchart, on top of each bar. It follows the previous most basic circular barchart.</p></center>
<div style="text-align:center">
<a class="btn btn-secondary btn-xl text-uppercase js-scroll-trigger" href='circular-barplot.html'>Circular bar section</a>
<a class="btn btn-secondary btn-xl text-uppercase js-scroll-trigger" href='https://www.data-to-viz.com/graph/circularbarplot.html'>Warning</a>
</div>
</div>
</header>
<!-- THIS ALLOWS TO INSERT THE ADVERTISEMENT BANNER THAT IS STORED IN A BANNER.HTML FILE-->
<div id="position_for_images"></div>
<script>
$(function(){
$("#position_for_images").load("html_chunk/images.html");
});
</script>
<!-- STYLE for chart pages but not the rest of tthe website -->
<style>
img {
margin-top: 20px;
}
</style>
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-12 align-self-center">
<p>The <a href="295-basic-circular-barplot.html">chart #295</a> explains how to make a basic <a href="circular-barplot.html">circular barplot</a>. The next step is to add labels to each bar, to give insight to the graphic.</p>
<p>Here I suggest a method to add label at the top of each bar, using the same angle that the central part of the bar. In the code below, a short section creates a dataframe with the feature of each label, that we can then call in <code>geom_text()</code>.</p>
<p>Note that labels are always in an angle that allows to read them easily, what requires a 180 degrees flip for some of them.</p>
</div>
<div class="col-md-6 col-sm-12">
<p><img src="296-add-labels-to-circular-barplot_files/figure-html/thecode-1.png" width="100%" /></p>
</div>
</div>
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="co"># Libraries</span></a>
<a class="sourceLine" id="cb1-2" data-line-number="2"><span class="kw">library</span>(tidyverse)</a>
<a class="sourceLine" id="cb1-3" data-line-number="3"> </a>
<a class="sourceLine" id="cb1-4" data-line-number="4"><span class="co"># Create dataset</span></a>
<a class="sourceLine" id="cb1-5" data-line-number="5">data <-<span class="st"> </span><span class="kw">data.frame</span>(</a>
<a class="sourceLine" id="cb1-6" data-line-number="6"> <span class="dt">id=</span><span class="kw">seq</span>(<span class="dv">1</span>,<span class="dv">60</span>),</a>
<a class="sourceLine" id="cb1-7" data-line-number="7"> <span class="dt">individual=</span><span class="kw">paste</span>( <span class="st">"Mister "</span>, <span class="kw">seq</span>(<span class="dv">1</span>,<span class="dv">60</span>), <span class="dt">sep=</span><span class="st">""</span>),</a>
<a class="sourceLine" id="cb1-8" data-line-number="8"> <span class="dt">value=</span><span class="kw">sample</span>( <span class="kw">seq</span>(<span class="dv">10</span>,<span class="dv">100</span>), <span class="dv">60</span>, <span class="dt">replace=</span>T)</a>
<a class="sourceLine" id="cb1-9" data-line-number="9">)</a>
<a class="sourceLine" id="cb1-10" data-line-number="10"> </a>
<a class="sourceLine" id="cb1-11" data-line-number="11"><span class="co"># ----- This section prepare a dataframe for labels ---- #</span></a>
<a class="sourceLine" id="cb1-12" data-line-number="12"><span class="co"># Get the name and the y position of each label</span></a>
<a class="sourceLine" id="cb1-13" data-line-number="13">label_data <-<span class="st"> </span>data</a>
<a class="sourceLine" id="cb1-14" data-line-number="14"> </a>
<a class="sourceLine" id="cb1-15" data-line-number="15"><span class="co"># calculate the ANGLE of the labels</span></a>
<a class="sourceLine" id="cb1-16" data-line-number="16">number_of_bar <-<span class="st"> </span><span class="kw">nrow</span>(label_data)</a>
<a class="sourceLine" id="cb1-17" data-line-number="17">angle <-<span class="st"> </span><span class="dv">90</span> <span class="op">-</span><span class="st"> </span><span class="dv">360</span> <span class="op">*</span><span class="st"> </span>(label_data<span class="op">$</span>id<span class="fl">-0.5</span>) <span class="op">/</span>number_of_bar <span class="co"># I substract 0.5 because the letter must have the angle of the center of the bars. Not extreme right(1) or extreme left (0)</span></a>
<a class="sourceLine" id="cb1-18" data-line-number="18"> </a>
<a class="sourceLine" id="cb1-19" data-line-number="19"><span class="co"># calculate the alignment of labels: right or left</span></a>
<a class="sourceLine" id="cb1-20" data-line-number="20"><span class="co"># If I am on the left part of the plot, my labels have currently an angle < -90</span></a>
<a class="sourceLine" id="cb1-21" data-line-number="21">label_data<span class="op">$</span>hjust<-<span class="kw">ifelse</span>( angle <span class="op"><</span><span class="st"> </span><span class="dv">-90</span>, <span class="dv">1</span>, <span class="dv">0</span>)</a>
<a class="sourceLine" id="cb1-22" data-line-number="22"> </a>
<a class="sourceLine" id="cb1-23" data-line-number="23"><span class="co"># flip angle BY to make them readable</span></a>
<a class="sourceLine" id="cb1-24" data-line-number="24">label_data<span class="op">$</span>angle<-<span class="kw">ifelse</span>(angle <span class="op"><</span><span class="st"> </span><span class="dv">-90</span>, angle<span class="op">+</span><span class="dv">180</span>, angle)</a>
<a class="sourceLine" id="cb1-25" data-line-number="25"><span class="co"># ----- ------------------------------------------- ---- #</span></a>
<a class="sourceLine" id="cb1-26" data-line-number="26"> </a>
<a class="sourceLine" id="cb1-27" data-line-number="27"> </a>
<a class="sourceLine" id="cb1-28" data-line-number="28"><span class="co"># Start the plot</span></a>
<a class="sourceLine" id="cb1-29" data-line-number="29">p <-<span class="st"> </span><span class="kw">ggplot</span>(data, <span class="kw">aes</span>(<span class="dt">x=</span><span class="kw">as.factor</span>(id), <span class="dt">y=</span>value)) <span class="op">+</span><span class="st"> </span><span class="co"># Note that id is a factor. If x is numeric, there is some space between the first bar</span></a>
<a class="sourceLine" id="cb1-30" data-line-number="30"><span class="st"> </span></a>
<a class="sourceLine" id="cb1-31" data-line-number="31"><span class="st"> </span><span class="co"># This add the bars with a blue color</span></a>
<a class="sourceLine" id="cb1-32" data-line-number="32"><span class="st"> </span><span class="kw">geom_bar</span>(<span class="dt">stat=</span><span class="st">"identity"</span>, <span class="dt">fill=</span><span class="kw">alpha</span>(<span class="st">"skyblue"</span>, <span class="fl">0.7</span>)) <span class="op">+</span></a>
<a class="sourceLine" id="cb1-33" data-line-number="33"><span class="st"> </span></a>
<a class="sourceLine" id="cb1-34" data-line-number="34"><span class="st"> </span><span class="co"># Limits of the plot = very important. The negative value controls the size of the inner circle, the positive one is useful to add size over each bar</span></a>
<a class="sourceLine" id="cb1-35" data-line-number="35"><span class="st"> </span><span class="kw">ylim</span>(<span class="op">-</span><span class="dv">100</span>,<span class="dv">120</span>) <span class="op">+</span></a>
<a class="sourceLine" id="cb1-36" data-line-number="36"><span class="st"> </span></a>
<a class="sourceLine" id="cb1-37" data-line-number="37"><span class="st"> </span><span class="co"># Custom the theme: no axis title and no cartesian grid</span></a>
<a class="sourceLine" id="cb1-38" data-line-number="38"><span class="st"> </span><span class="kw">theme_minimal</span>() <span class="op">+</span></a>
<a class="sourceLine" id="cb1-39" data-line-number="39"><span class="st"> </span><span class="kw">theme</span>(</a>
<a class="sourceLine" id="cb1-40" data-line-number="40"> <span class="dt">axis.text =</span> <span class="kw">element_blank</span>(),</a>
<a class="sourceLine" id="cb1-41" data-line-number="41"> <span class="dt">axis.title =</span> <span class="kw">element_blank</span>(),</a>
<a class="sourceLine" id="cb1-42" data-line-number="42"> <span class="dt">panel.grid =</span> <span class="kw">element_blank</span>(),</a>
<a class="sourceLine" id="cb1-43" data-line-number="43"> <span class="dt">plot.margin =</span> <span class="kw">unit</span>(<span class="kw">rep</span>(<span class="op">-</span><span class="dv">1</span>,<span class="dv">4</span>), <span class="st">"cm"</span>) <span class="co"># Adjust the margin to make in sort labels are not truncated!</span></a>
<a class="sourceLine" id="cb1-44" data-line-number="44"> ) <span class="op">+</span></a>
<a class="sourceLine" id="cb1-45" data-line-number="45"><span class="st"> </span></a>
<a class="sourceLine" id="cb1-46" data-line-number="46"><span class="st"> </span><span class="co"># This makes the coordinate polar instead of cartesian.</span></a>
<a class="sourceLine" id="cb1-47" data-line-number="47"><span class="st"> </span><span class="kw">coord_polar</span>(<span class="dt">start =</span> <span class="dv">0</span>) <span class="op">+</span></a>
<a class="sourceLine" id="cb1-48" data-line-number="48"><span class="st"> </span></a>
<a class="sourceLine" id="cb1-49" data-line-number="49"><span class="st"> </span><span class="co"># Add the labels, using the label_data dataframe that we have created before</span></a>
<a class="sourceLine" id="cb1-50" data-line-number="50"><span class="st"> </span><span class="kw">geom_text</span>(<span class="dt">data=</span>label_data, <span class="kw">aes</span>(<span class="dt">x=</span>id, <span class="dt">y=</span>value<span class="op">+</span><span class="dv">10</span>, <span class="dt">label=</span>individual, <span class="dt">hjust=</span>hjust), <span class="dt">color=</span><span class="st">"black"</span>, <span class="dt">fontface=</span><span class="st">"bold"</span>,<span class="dt">alpha=</span><span class="fl">0.6</span>, <span class="dt">size=</span><span class="fl">2.5</span>, <span class="dt">angle=</span> label_data<span class="op">$</span>angle, <span class="dt">inherit.aes =</span> <span class="ot">FALSE</span> ) </a>
<a class="sourceLine" id="cb1-51" data-line-number="51"> </a>
<a class="sourceLine" id="cb1-52" data-line-number="52">p</a></code></pre></div>
<h1 id="whats-next">What’s next?</h1>
<hr />
<p>Have a look to <a href="297-circular-barplot-with-groups.html">graph #297</a> for a grouped barplot, or check the circular barplot <a href="circular-barplot.html">section</a> for more examples.</p>
<p><a class="btn btn-secondary" href="297-circular-barplot-with-groups.html">Grouped barplot</a> <a class="btn btn-secondary" href="circular-barplot.html">See all examples</a></p>
<!-- Close container -->
</div>
<!-- ============================ RELATED SECTION ============================ -->
<section class="bg-light" id="portfolio_landing" style="padding-top: 30px; padding-bottom: 30px; margin-top: 100px;">
<div class="container">
<p class="mySeryTitle">Related chart types</p>
<hr>
<div class="row">
<div class="col-md-2 col-sm-4 portfolio-item ">
<a class="portfolio-link" href="barplot.html">
<div class="portfolio-hover">
<div class="portfolio-hover-content">
<i class="fa fa-plus fa-3x"></i>
</div>
</div>
<img class="img-fluid" src="img/section/Bar150.png" alt="">
</a>
<div class="captionPortfolio">Barplot</div>
</div>
<div class="col-md-2 col-sm-4 portfolio-item ">
<a class="portfolio-link" href="spider-or-radar-chart.html">
<div class="portfolio-hover">
<div class="portfolio-hover-content">
<i class="fa fa-plus fa-3x"></i>
</div>
</div>
<img class="img-fluid" src="img/section/Spider150.png" alt="">
</a>
<div class="captionPortfolio">Spider / Radar</div>
</div>
<div class="col-md-2 col-sm-4 portfolio-item ">
<a class="portfolio-link" href="wordcloud.html">
<div class="portfolio-hover">
<div class="portfolio-hover-content">
<i class="fa fa-plus fa-3x"></i>
</div>
</div>
<img class="img-fluid" src="img/section/Wordcloud150.png" alt="">
</a>
<div class="captionPortfolio">Wordcloud</div>
</div>
<div class="col-md-2 col-sm-4 portfolio-item ">
<a class="portfolio-link" href="parallel-plot.html">
<div class="portfolio-hover">
<div class="portfolio-hover-content">
<i class="fa fa-plus fa-3x"></i>
</div>
</div>
<img class="img-fluid" src="img/section/Parallel1150.png" alt="">
</a>
<div class="captionPortfolio">Parallel</div>
</div>
<div class="col-md-2 col-sm-4 portfolio-item ">
<a class="portfolio-link" href="lollipop-plot.html">
<div class="portfolio-hover">
<div class="portfolio-hover-content">
<i class="fa fa-plus fa-3x"></i>
</div>
</div>
<img class="img-fluid" src="img/section/Lollipop150.png" alt="">
</a>
<div class="captionPortfolio">Lollipop</div>
</div>
<div class="col-md-2 col-sm-4 portfolio-item ">
<a class="portfolio-link" href="circular-barplot.html">
<div class="portfolio-hover">
<div class="portfolio-hover-content">
<i class="fa fa-plus fa-3x"></i>
</div>
</div>
<img class="img-fluid" src="img/section/CircularBarplot150.png" alt="">
</a>
<div class="captionPortfolio">Circular Barplot</div>
</div>
</div>
</div>
</section>
<!-- ============================ CONTACT SECTION ============================ -->
<section id="contact" class="bg" style="background-color: white; padding-top: 60px">
<div class="container">
<div class="row">
<div class="col-lg-2 text-center"></div>
<div class="col-lg-8 text-center">
<br><br><br>
<h2 class="section-heading text-uppercase" style="color: black">Contact</h2>
<p>This document is a work by <a href="https://www.yan-holtz.com">Yan Holtz</a>. Any feedback is highly encouraged. You can fill an issue on <a href="https://github.com/holtzy/D3-graph-gallery/issues">Github</a>, drop me a message on <a href="https://twitter.com/R_Graph_Gallery">Twitter</a>, or send an email pasting <a href="">yan.holtz.data</a> with <a href="">gmail.com</a>.</p>
<div style="text-align:center">
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="https://github.com/holtzy">Github</a>
<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="https://twitter.com/R_Graph_Gallery">Twitter</a>
</div>
</div>
</div>
</div>
</section>
<!-- ============================ FOOTER SECTION ============================ -->
<footer class="bg-light" id="myFooter">
<div class="container" >
<div class="row">
<div class="col-md-4">
<span class="copyright">Copyright © the R graph gallery 2018</span>
</div>
<div class="col-md-4">
<ul class="list-inline social-buttons">
<li class="list-inline-item">
<a href="https://twitter.com/R_Graph_Gallery">
<i class="fa fa-twitter"></i>
</a>
</li>
<li class="list-inline-item">
<a href="https://github.com/holtzy">
<i class="fa fa-github"></i>
</a>
</li>
<li class="list-inline-item">
<a href="https://www.linkedin.com/in/yan-holtz-2477534a/">
<i class="fa fa-linkedin"></i>
</a>
</li>
</ul>
</div>
<div class="col-md-4">
<ul class="list-inline quicklinks">
<li class="list-inline-item">
<a href="#">Privacy Policy</a>
</li>
<li class="list-inline-item">
<a href="#">Terms of Use</a>
</li>
</ul>
</div>
</div>
</div>
</footer>
<script>
// add bootstrap table styles to pandoc tables
function bootstrapStylePandocTables() {
$('tr.header').parent('thead').parent('table').addClass('table table-condensed');
}
$(document).ready(function () {
bootstrapStylePandocTables();
});
</script>
<!-- ============================ JAVASCRIPT SECTION ============================ -->
<!-- Bootstrap core JavaScript -->
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Custom scripts for this template -->
<script src="js/agency.min.js"></script>
</body>
</html>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。