\documentclass[varwidth=true, border=5pt]{article}
\usepackage[active,tightpage]{preview}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}
\usepackage{helvet}
\usepackage[eulergreek]{sansmath}
\begin{document}
\begin{preview}
\begin{tikzpicture}
\begin{axis}[
width=13.4cm,
height=10.0cm,
% Grid
grid = major,
% size
xmin= 40, % start the diagram at this x-coordinate
xmax= 90, % end the diagram at this x-coordinate
ymin= 0, % start the diagram at this y-coordinate
ymax= 60, % end the diagram at this y-coordinate
% Legende
legend style={
font=\large\sansmath\sffamily,
at={(0.5,-0.18)},
anchor=north,
legend cell align=left,
legend columns=-1,
column sep=0.5cm
},
% Ticks
tick align=inside,
every axis/.append style={font=\large\sansmath\sffamily},
minor tick style={thick},
scaled y ticks = false,
% Axis
axis line style = {very thick,shorten <=-0.5\pgflinewidth},
axis lines = middle,
axis line style = very thick,
xlabel=Gesamtausgaben,
x label style={at={(axis description cs:0.5,-0.05)},
anchor=north,
font=\boldmath\sansmath\sffamily\Large},
ylabel=Luxusausgaben,
y label style={at={(axis description cs:-0.05,0.5)},
anchor=south,
rotate=90,
font=\boldmath\sansmath\sffamily\Large},
]
\addplot[
scatter,
only marks,
point meta=explicit symbolic,
scatter/classes={
a={mark=x,red!90!black},%
b={mark=x,cyan!50!black}},
]
table[col sep=comma, meta=label] {data.csv};
\addplot[
scatter,
only marks,
point meta=explicit symbolic,
scatter/classes={
b={mark=*,mark size=3pt,red!30!white,draw=black},%
c={mark=*,mark size=3pt,cyan!30!white,draw=black},%
a={mark=*,mark size=3pt,green!70!black,draw=black}},
]
table[meta=label] {
x y label
65 35 a
70 40 b
60 20 c
};
% \addlegendentry{Gruppe 1}
% \addlegendentry{Gruppe 2}
\end{axis}
\end{tikzpicture}
\end{preview}
\end{document}
The data is available at GitHub. However, you can create similar data with the following Python code:
#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy
import csv
cov = [[25, 20], [20, 25]] # diagonal covariance, points lie on x or y-axis
meanI = [70, 40]
datapointsI = 2000
meanII = [60, 20]
datapointsII = 2000
dataI = numpy.random.multivariate_normal(meanI, cov, datapointsI).T
x, y = dataI
plt.plot(x, y, 'x')
dataII = numpy.random.multivariate_normal(meanII, cov, datapointsII).T
x, y = dataII
plt.plot(x, y, 'x')
plt.axis('equal')
plt.show()
data = []
xs, ys = dataI
for x, y in zip(xs, ys):
data.append([x, y, 'a'])
xs, ys = dataII
for x, y in zip(xs, ys):
data.append([x, y, 'b'])
# Write data to csv files
with open("data.csv", 'wb') as csvfile:
csvfile.write("x,y,label\n")
spamwriter = csv.writer(csvfile, delimiter=',',
quotechar='"', quoting=csv.QUOTE_MINIMAL)
for datapoint in data:
spamwriter.writerow(datapoint)