diff --git a/src/plot.cpp b/src/plot.cpp
--- a/src/plot.cpp
+++ b/src/plot.cpp
@@ -39,6 +39,7 @@ Plot::Plot(QWidget* parent) :
     isAutoScaled = true;
     symbolSize = 0;
     numOfSamples = 1;
+    showSymbols = ShowSymbolsAuto;
 
     QObject::connect(&zoomer, &Zoomer::unzoomed, this, &Plot::unzoomed);
 
@@ -247,8 +248,38 @@ void Plot::flashSnapshotOverlay(bool lig
             });
 }
 
+void Plot::setSymbols(ShowSymbols shown)
+{
+    showSymbols = shown;
+
+    if (showSymbols == ShowSymbolsAuto)
+    {
+        calcSymbolSize();
+    }
+    else if (showSymbols == ShowSymbolsAlways)
+    {
+        symbolSize = SYMBOL_SIZE_MAX;
+    }
+    else
+    {
+        symbolSize = 0;
+    }
+
+    updateSymbols();
+    replot();
+}
+
 void Plot::onXScaleChanged()
 {
+    if (showSymbols == ShowSymbolsAuto)
+    {
+        calcSymbolSize();
+        updateSymbols();
+    }
+}
+
+void Plot::calcSymbolSize()
+{
     auto sw = axisWidget(QwtPlot::xBottom);
     auto paintDist = sw->scaleDraw()->scaleMap().pDist();
     auto scaleDist = sw->scaleDraw()->scaleMap().sDist();
@@ -265,8 +296,6 @@ void Plot::onXScaleChanged()
     {
         symbolSize = std::min(SYMBOL_SIZE_MAX, symDisPx-SYMBOL_SHOW_AT_WIDTH+1);
     }
-
-    updateSymbols();
 }
 
 void Plot::updateSymbols()
@@ -297,7 +326,7 @@ void Plot::resizeEvent(QResizeEvent * ev
     onXScaleChanged();
 }
 
-void Plot::onNumOfSamplesChanged(unsigned value)
+void Plot::setNumOfSamples(unsigned value)
 {
     numOfSamples = value;
     onXScaleChanged();
diff --git a/src/plot.h b/src/plot.h
--- a/src/plot.h
+++ b/src/plot.h
@@ -33,6 +33,13 @@
 #include "scalezoomer.h"
 #include "plotsnapshotoverlay.h"
 
+enum ShowSymbols
+{
+    ShowSymbolsAuto,
+    ShowSymbolsAlways,
+    ShowSymbolsNever
+};
+
 class Plot : public QwtPlot
 {
     Q_OBJECT
@@ -54,6 +61,7 @@ public slots:
     void darkBackground(bool enabled = true);
     void setYAxis(bool autoScaled, double yMin = 0, double yMax = 1);
     void setXAxis(double xMin, double xMax);
+    void setSymbols(ShowSymbols shown);
 
     /**
      * Displays an animation for snapshot.
@@ -62,7 +70,7 @@ public slots:
      */
     void flashSnapshotOverlay(bool light);
 
-    void onNumOfSamplesChanged(unsigned value);
+    void setNumOfSamples(unsigned value);
 
 protected:
     /// update the display of symbols depending on `symbolSize`
@@ -80,9 +88,11 @@ private:
     PlotSnapshotOverlay* snapshotOverlay;
     QwtPlotLegendItem legend;
     QwtPlotTextLabel demoIndicator;
+    ShowSymbols showSymbols;
 
     void resetAxes();
     void resizeEvent(QResizeEvent * event);
+    void calcSymbolSize();
 
 private slots:
     void unzoomed();
diff --git a/src/plotmanager.cpp b/src/plotmanager.cpp
--- a/src/plotmanager.cpp
+++ b/src/plotmanager.cpp
@@ -17,6 +17,7 @@
   along with serialplot.  If not, see .
 */
 
+#include 
 #include "qwt_symbol.h"
 
 #include "plot.h"
@@ -32,7 +33,8 @@ PlotManager::PlotManager(QWidget* plotAr
     unzoomAction("&Unzoom", this),
     darkBackgroundAction("&Dark Background", this),
     showLegendAction("&Legend", this),
-    showMultiAction("Multi &Plot", this)
+    showMultiAction("Multi &Plot", this),
+    setSymbolsAction("Symbols", this)
 {
     _autoScaled = true;
     _yMin = 0;
@@ -40,6 +42,7 @@ PlotManager::PlotManager(QWidget* plotAr
     isDemoShown = false;
     _infoModel = infoModel;
     _numOfSamples = 1;
+    showSymbols = ShowSymbolsAuto;
 
     // initalize layout and single widget
     isMulti = false;
@@ -54,6 +57,7 @@ PlotManager::PlotManager(QWidget* plotAr
     darkBackgroundAction.setToolTip("Enable Dark Plot Background");
     showLegendAction.setToolTip("Display the Legend on Plot");
     showMultiAction.setToolTip("Display All Channels Separately");
+    setSymbolsAction.setToolTip("Show/Hide symbols");
 
     showGridAction.setShortcut(QKeySequence("G"));
     showMinorGridAction.setShortcut(QKeySequence("M"));
@@ -72,6 +76,37 @@ PlotManager::PlotManager(QWidget* plotAr
 
     showMinorGridAction.setEnabled(false);
 
+    // setup symbols menu
+    auto setSymbolAutoAct = setSymbolsMenu.addAction("Show When Zoomed");
+    setSymbolAutoAct->setCheckable(true);
+    setSymbolAutoAct->setChecked(true);
+    connect(setSymbolAutoAct, SELECT::OVERLOAD_OF(&QAction::triggered),
+            [this](bool checked)
+            {
+                if (checked) setSymbols(ShowSymbolsAuto);
+            });
+    auto setSymbolAlwaysAct = setSymbolsMenu.addAction("Always Show");
+    setSymbolAlwaysAct->setCheckable(true);
+    connect(setSymbolAlwaysAct, SELECT::OVERLOAD_OF(&QAction::triggered),
+            [this](bool checked)
+            {
+                if (checked) setSymbols(ShowSymbolsAlways);
+            });
+    auto setSymbolHideAct = setSymbolsMenu.addAction("Always Hide");
+    setSymbolHideAct->setCheckable(true);
+    connect(setSymbolHideAct, SELECT::OVERLOAD_OF(&QAction::triggered),
+            [this](bool checked)
+            {
+                if (checked) setSymbols(ShowSymbolsNever);
+            });
+    setSymbolsAction.setMenu(&setSymbolsMenu);
+
+    // add symbol actions to same group so that they appear as radio buttons
+    auto group = new QActionGroup(this);
+    group->addAction(setSymbolAutoAct);
+    group->addAction(setSymbolAlwaysAct);
+    group->addAction(setSymbolHideAct);
+
     connect(&showGridAction, SELECT::OVERLOAD_OF(&QAction::triggered),
             this, &PlotManager::showGrid);
     connect(&showGridAction, SELECT::OVERLOAD_OF(&QAction::triggered),
@@ -252,6 +287,8 @@ Plot* PlotManager::addPlotWidget()
     plot->showLegend(showLegendAction.isChecked());
     plot->showDemoIndicator(isDemoShown);
     plot->setYAxis(_autoScaled, _yMin, _yMax);
+    plot->setNumOfSamples(_numOfSamples);
+    plot->setSymbols(showSymbols);
 
     if (_xAxisAsIndex)
     {
@@ -363,6 +400,7 @@ QList PlotManager::menuActions
     actions << &darkBackgroundAction;
     actions << &showLegendAction;
     actions << &showMultiAction;
+    actions << &setSymbolsAction;
     return actions;
 }
 
@@ -415,6 +453,15 @@ void PlotManager::darkBackground(bool en
     }
 }
 
+void PlotManager::setSymbols(ShowSymbols shown)
+{
+    showSymbols = shown;
+    for (auto plot : plotWidgets)
+    {
+        plot->setSymbols(shown);
+    }
+}
+
 void PlotManager::setYAxis(bool autoScaled, double yAxisMin, double yAxisMax)
 {
     _autoScaled = autoScaled;
@@ -464,7 +511,7 @@ void PlotManager::onNumOfSamplesChanged(
     _numOfSamples = value;
     for (auto plot : plotWidgets)
     {
-        plot->onNumOfSamplesChanged(value);
+        plot->setNumOfSamples(value);
         if (_xAxisAsIndex) plot->setXAxis(0, value);
     }
 }
diff --git a/src/plotmanager.h b/src/plotmanager.h
--- a/src/plotmanager.h
+++ b/src/plotmanager.h
@@ -26,6 +26,8 @@
 #include 
 #include 
 #include 
+#include 
+#include 
 
 #include 
 #include "plot.h"
@@ -89,6 +91,7 @@ private:
     double _xMin;
     double _xMax;
     unsigned _numOfSamples;
+    ShowSymbols showSymbols;
 
     // menu actions
     QAction showGridAction;
@@ -97,6 +100,8 @@ private:
     QAction darkBackgroundAction;
     QAction showLegendAction;
     QAction showMultiAction;
+    QAction setSymbolsAction;
+    QMenu   setSymbolsMenu;
 
     void setupLayout(bool multiPlot);
     /// Inserts a new plot widget to the current layout.
@@ -105,6 +110,7 @@ private:
     Plot* plotWidget(unsigned curveIndex);
     /// Common part of overloaded `addCurve` functions
     void _addCurve(QwtPlotCurve* curve);
+    void setSymbols(ShowSymbols shown);
 
 private slots:
     void showGrid(bool show = true);