pgfplots: Abgerundete Ecken für Diagrammbox

pgfplots: Abgerundete Ecken für Diagrammbox

Wir betrachten einen kleinen Code, pgfplotsbei dem das äußere Gitter rechteckig ist, wie dieses mit diesem MWE erstellte Bild:

Bildbeschreibung hier eingeben

\documentclass[a4paper,12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.15}
\begin{document}

\begin{tikzpicture}
\begin{axis}
\end{axis}
\end{tikzpicture}
\end{document}

Aber ist dieses rechteckige Raster fest, oder ist es möglich, auch ein Bild wie dieses zu erhalten, bei dem die Kanten abgerundet sind und eingefärbt werden können und bei dem man innerhalb des abgerundeten Rechtecks ​​verschiedene Grafiken zeichnen kann?

Bildbeschreibung hier eingeben

Antwort1

Dies verwendet einfaches TikZ mit intersectionsBibliothek für den Schnittpunkt. Beachten Sie, dass die scopeUmgebung verschachtelt werden kann, mehrere \clips werden zum Füllen verwendet. Wenn Sie das Rechteck mit mehr abgerundeten Ecken wünschen, verwenden Sie einfach [rounded corners=3mm]zB in der Definition von \bb.

Ich glaube, dass pgfplotssich das mit den entsprechenden Optionen in der Umgebung auch leicht zeichnen lässt axis. Mit einfachem TikZ fühle ich mich jedoch wohler.

Bildbeschreibung hier eingeben

\documentclass[tikz,border=3mm]{standalone}
\usepackage{amsmath}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[scale=2]
\def\bb{[rounded corners] (-1,-1) rectangle (2,1.5)}
\def\curveA{plot[domain=-1:2,smooth,samples=100]  (\x,{\x/(sqrt(1+\x*\x))})}
\def\curveB{plot[domain=-1:2,smooth,samples=100](\x,{pow(\x,4)-\x})}
\begin{scope} \clip \bb;
\begin{scope} 
\clip \curveA|-cycle;
\clip \curveB--cycle;
\fill[cyan!20] \bb;
\end{scope}
\draw (-1,0)--(2,0) (0,-1)--(0,1.5);
\draw[magenta,thick,name path=A] \curveA;
\draw[cyan,thick,name path=B] \curveB;
\path[name intersections={of=A and B}] (intersection-2) node[cyan,rectangle,minimum size=2mm,draw,thick]{};
\end{scope}
\draw[cyan] \bb;
\foreach \i in {-.5,0,...,1.5} \draw (\i,.05)--(\i,-.05);
\foreach \j in {-.5,0,...,1} \draw (.05,\j)--(-.05,\j);
\path
(-1,0) node[left]{$-1$}
(2,0) node[right]{$2$}
(0,-1) node[below]{$-1$}
(0,1.5) node[above]{$1.5$}
(1.2,-.5) node{$y=x^4-x$}
(.6,1.2) node (N) {$y=\dfrac{x}{\sqrt{x^2+1}}$};
\draw[-stealth] (N)--+(-60:.6);
\end{tikzpicture}
\end{document}

Antwort2

Dies alles lässt sich mit einfachen pgfplotsMitteln erledigen.

  1. Der abgerundete Rahmen ist so einfach wie axis background/.style={rounded corners=4mm,draw=blue},
  2. Das Entfernen der Pfeile ist so einfach wie every inner x axis line/.append style={-},every inner y axis line/.append style={-}:
  3. Die Schattierung kann mit erfolgen fillbetween.
  4. Bei den Formeln handelt es sich um einfache Beschriftungen/Pins.
  5. Die Max- und Min-Werte können anhand der xminusw. Werte mit automatisch angehängt werden after end axis/.code.

Der Einfachheit halber habe ich die meisten dieser Dinge in einem Stil namens gesammelt Sebastiano.

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\pgfplotsset{Sebastiano/.style={xticklabel=\empty,yticklabel=\empty,
    axis lines = center,
    every inner x axis line/.append style={-},
    every inner y axis line/.append style={-},
    axis background/.style={rounded corners=4mm,draw=blue},
    before end axis/.code={\path (0,0) coordinate (O);},
    after end axis/.code={
    \path
     (current axis.east|-O) node[right]
      {\pgfmathprintnumber{\pgfkeysvalueof{/pgfplots/xmax}}}
     (current axis.west|-O) node[left]
      {\pgfmathprintnumber{\pgfkeysvalueof{/pgfplots/xmin}}}
     (current axis.north-|O) node[above]
      {\pgfmathprintnumber{\pgfkeysvalueof{/pgfplots/ymax}}}
     (current axis.south-|O) node[below]
      {\pgfmathprintnumber{\pgfkeysvalueof{/pgfplots/ymin}}};
    }
}}
\usepgfplotslibrary{fillbetween}
\begin{document}

\begin{tikzpicture}
%
\begin{axis}[Sebastiano,width =12cm,
    xmin = -1,xmax = 2,
    ymin = -1,ymax = 1.5,
    domain=-1:2,smooth]
    \addplot[name path=A,color=magenta,thick]  {x/sqrt(1+x*x)}
    coordinate[pos=0.7,pin={[black,pin edge={stealth-,thick}]100:{$\displaystyle y=\frac{x}{\sqrt{1+x^2}}$}}](pA);
    \addplot[name path=B,color=cyan,thick]  {x^4-x}
    coordinate[pos=0.19,label={[black]below right:{$\displaystyle y=x^4-x$}}](pB);
    \addplot fill between [of=A and B,
        split,
        every segment no 0/.style={fill=none},
        every segment no 1/.style={cyan,opacity=50},
        every segment no 2/.style={fill=none},
        ];
\end{axis}
%
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

Antwort3

Als Ausgangspunkt verwende ich die Antwort von Dr. Manuel Kuehner (da sie ein einfacheres Diagramm verwendet). Mit Hilfe der fitTikZ-Bibliothek:

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{fit}
\pgfplotsset{compat=1.16}

\begin{document}
    \begin{tikzpicture}
\begin{axis}[name=PLOT,
    width = 80mm,
    height= 60mm,
    xmin = -1.2,
    xmax =  2.2,
    ymin = -1.3,
    ymax =  4.3,
    axis lines = center,
    scale only axis
    ]
    \addplot[
        domain = 0:2,
        red,
        line width = 1pt
        ]
        {x^2};
\coordinate (O) at (0,0);
\end{axis}
%
\node (f) [draw=blue, thick, rounded corners = 5mm, 
           inner sep=0pt, fit=(PLOT)] {};
\path   (O-|f.west)  node[lbl, left]  {$-1$}  (O-|f.east)  node[lbl,right] {$2$}
        (O|-f.north) node[lbl,above]  {$1.5$} (O|-f.south) node[lbl,below] {$-1$};
    \end{tikzpicture}
\end{document}

Bearbeiten: Beschriftungen für Koordinaten außerhalb des fKnotens hinzugefügt (sie sind \Largeund red, so dass Sie leicht erkennen können, dass sie auf dem Bild sind, diese Einstellungen können Sie leicht ändern)

Bildbeschreibung hier eingeben

Antwort4

  • Nur eine Idee/ein Anfang (gehe jetzt ins Bett).
  • Platzieren von zwei Parzellen übereinander.
  • Sie haben die gleiche Größe, aber unterschiedliche Achsenoptionen.
  • scale only axisist wichtig.

\documentclass{article}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
%
\begin{axis}[
    width = 80mm,
    height = 60mm,
    xmin = -1.2,
    xmax = 2.2,
    ymin = -1.3,
    ymax = 4.3,
    axis x line = center,
    axis y line = center,
    %axis line style = {rounded corners = 4mm},
    scale only axis
    ]
    \addplot[
        domain = 0:2, 
        red, 
        line width = 1pt
        ] 
        {x^2};
\end{axis}
%
\begin{axis}[
    width = 80mm,
    height = 60mm,
    xmin = -1.2,
    xmax = 2.2,
    ymin = -1.3,
    ymax = 4.3,
    axis line style = {rounded corners = 5mm, blue},
    scale only axis,
    ticks = none
    ]
\end{axis}
%
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen