Get and Set existing matrix field data in a plugin
Since Matrix blocks are elements as well it's the same

Your form could be

{% set movies = entry.movies.all() %}
{% for movie in movies %}
    &lt;form&gt;
        &lt;input type="hidden" value="plugin/controller/function" name="action"&gt;
        {{ csrfInput() }}
        &lt;input type="hidden" value="{{ movie.id }}" name="id"&gt;
        &lt;input type="submit" value="Vote this movie"&gt;
    &lt;/form&gt;
{% endfor %}


And your controller

public function actionSave(){
    $id = Craft::$app-&gt;getRequest()-&gt;getRequiredBodyParam('id');
    $matrixBlock = Craft::$app-&gt;getMatrix()-&gt;getBlockById($id);
    if($matrixBlock === null){
        throw new ElementNotFoundException('Could not find Block with ID ' . $id);
    }

    $matrixBlock-&gt;setFieldValue('votes', $matrixBlock-&gt;getFieldValue('votes')+1);
    if(!Craft::$app-&gt;getElements()-&gt;saveElement($matrixBlock)){
        // handle an error
    }

    return $this-&gt;redirectToPostedUrl();
}